C#,有没有比IsWellFormedUriString更好的方法来验证URL格式?

时间:2011-04-12 00:47:28

标签: c# url uri notsupportedexception

是否有更好/更准确/更严格的方法/方法来确定网址格式是否正确?

使用:

bool IsGoodUrl = Uri.IsWellFormedUriString(url, UriKind.Absolute);

不抓住一切。如果我输入htttp://www.google.com并运行该过滤器,它就会通过。然后我在致电NotSupportedException时获得WebRequest.Create

这个错误的网址也会使它超过以下代码(这是我能找到的唯一其他过滤器):

Uri nUrl = null;
if (Uri.TryCreate(url, UriKind.Absolute, out nUrl))
{
    url = nUrl.ToString(); 
}

4 个答案:

答案 0 :(得分:13)

Uri.IsWellFormedUriString("htttp://www.google.com", UriKind.Absolute)返回true的原因是因为它的形式可能是有效的Uri。 URI和URL不一样。

请参阅:What's the difference between a URI and a URL?

在您的情况下,我会检查new Uri("htttp://www.google.com").Scheme是否等于httphttps

答案 1 :(得分:8)

从技术上讲,根据URL specificationhtttp://www.google.com是格式正确的网址。抛出NotSupportedException因为htttp不是注册方案。如果它是格式不正确的网址,您将获得UriFormatException。如果您只关心HTTP(S)URL,那么也只需检查该方案。

答案 2 :(得分:3)

@Greg的解决方案是正确的。但是,您可以使用URI并验证所需的所有协议(方案)。

public static bool Url(string p_strValue)
{
    if (Uri.IsWellFormedUriString(p_strValue, UriKind.RelativeOrAbsolute))
    {
        Uri l_strUri = new Uri(p_strValue);
        return (l_strUri.Scheme == Uri.UriSchemeHttp || l_strUri.Scheme == Uri.UriSchemeHttps);
    }
    else
    {
        return false;
    }
}

答案 3 :(得分:-1)

此代码适用于检查Textbox是否具有有效的网址格式

if((!string.IsNullOrEmpty(TXBProductionURL.Text)) && (Uri.IsWellFormedUriString(TXBProductionURL.Text, UriKind.Absolute)))
{
     // assign as valid URL                
     isValidProductionURL = true; 

}