URL验证IsWellFormedUriString始终返回true

时间:2014-01-21 08:55:48

标签: c# url uri

我正在使用以下代码验证网址,但在两种情况下都存在问题 检查重演为真。我应该如何在第二个选项中弄错?

这里布尔是真的

 bool isWellFormedUriString = Uri.IsWellFormedUriString("http://stackoverflow.com/", UriKind.RelativeOrAbsolute);

这里也是如此

 bool isWellFormedUriString = Uri.IsWellFormedUriString("ddddd", UriKind.RelativeOrAbsolute);

现在我做的时候 _uri = new Uri(_url);我得到了例外......

2 个答案:

答案 0 :(得分:6)

试试这个:

Uri result;
if (Uri.TryCreate("http://stackoverflow.com",UriKind.Absolute, out result) && 
    result.Scheme == Uri.UriSchemeHttp) 
{
    //Use the valid Uri here
}

我限制了有效的方案,因为否则甚至目录URI都是有效的(例如:c:\\directory\\filename

答案 1 :(得分:6)

字符串ddddd可以是完整URI的有效“部分”,因此使用RelativeRelativeOrAbsolute会返回true。

尝试将第二个参数更改为UriKind.Absolute

bool isWellFormedUriString  // returns true
    = Uri.IsWellFormedUriString("http://stackoverflow.com/", UriKind.Absolute);

bool isWellFormedUriString  // returns false
    = Uri.IsWellFormedUriString("ddddd", UriKind.Absolute);

来自docs

  

绝对URI的特点是对资源的完整引用(例如:http://www.contoso.com/index.html),而相对Uri依赖于先前定义的基URI(例如:/index.html)。