无效的URI:主机名无法解析。

25

我正在尝试构建一个URI,但是我无法处理错误的URI。

有没有办法处理错误的URI?

我正在使用的代码:

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部分会因为错误的URI而出现错误。

谢谢!


1
如果您使用代码示例标签,阅读这段内容将会更加容易。 - Jeramy Rutley
如果您想验证一个字符串是否为有效的主机名,您可能会发现 Uri.CheckHostName 很有用。 - Michael Haren
6个回答

26

调用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
很酷,我不知道它的存在。由于你的帖子似乎是最好的答案,所以我删除了我的帖子。 - Cédric Guillemette

3
我之前在"http://"后面加了一个空格,像是这样的:"http:// exampleServer/exampleservice.svc",导致了这个错误。

2

对于任何人来说,这可能是一个问题,我在一些网址上遇到了无效的URI:主机名无法解析,而在其他网址上则没有出现这种情况。

我查看了制造问题的url,它们在url中使用反斜杠 '\' 而不是正斜杠 '/'

所以在URI解析时会出错。


1
也许这会帮助未来的某个可怜人。我刚刚花了5个小时,试图解决SpecFlow出现的这个错误,但却一无所获。我找不到罪魁祸首,但我相当确定对我来说问题是路径名太长或者路径中有一些不良因素。当我将解决方案移动到较短的路径名时,它就可以运行了。这里是我关于我遇到的错误具体细节的SO问题/答案

0

我在尝试在C#中构建URI对象时遇到了类似的错误。 对我来说,问题是长度。


0

我在使用nginx fastcgi-mono-server4时遇到了类似的错误。原来是web服务器提供的SERVER_NAME正则表达式值有问题。因此,我必须在服务器上进行修复,将fastcgi_param SERVER_NAME $server_name;替换为fastcgi_param SERVER_NAME $host;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接