Invalid URI: The hostname could not be parsed

Publish date: 2024-05-15

I am trying to Construct a URI. But I am unable to handle bad URIs.

Is there any way we can handle bad URIs?

Code I am using:

if (reviews[e.Item.ItemIndex].URL.ToString().Contains("http:")) { oURI = new Uri(reviews[e.Item.ItemIndex].URL.ToString()); } else { oURI = new Uri("http://"+ reviews[e.Item.ItemIndex].URL.ToString()); } 

else part gets error out for bad URIs.

Thank you!

1

6 Answers

Call Uri.TryCreate:

string original = reviews[e.Item.ItemIndex].URL.ToString(); if (!original.StartsWith("http:")) original = "http://" + original; Uri uri; if (!Uri.TryCreate(original, UriKind.Absolute, out uri)) { //Bad bad bad! } 
1

I had a space after "http:// " like http:// exampleServer/exampleservice.svc which had caused this error.

For anyone, this could be the issue, There was Invalid URI: The hostname could not be parsed for me on some urls and one some urls it was not coming.

I looked into the urls making issue, they had '\' instead of '/' in urls,

so in URI parsing it throws error.

Maybe this will help some poor soul in the future. I just spent 5 hours bashing my head against a wall trying to figure out why SpecFlow was choking on this exact error. I couldn't find the smoking gun, but I am fairly certain for me it was the path name was too long, or potentially there was something bad in the path. When I moved the solution to smaller path name it worked. Here is the SO question/answer I posted about the specifics around the error I was getting.

I got similar error with nginx fastcgi-mono-server4. It turns out that webserver provided regex value for SERVER_NAME. So I have to fix it on the server by replacing fastcgi_param SERVER_NAME $server_name; with fastcgi_param SERVER_NAME $host;

I got into a similar error when trying to construct a URI object in C#. For me the problem was the length.

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJoa2pxZ2x9cXvIp62apJmZera%2ByGaroZ1dnby0wM2apJ5lk6TCrbCMp6atZZKaerGt0aycnQ%3D%3D