12

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

使用:

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

没有抓住一切。如果我键入htttp://www.google.com并运行该过滤器,它就会通过。然后我NotSupportedException在打电话时得到一个稍后WebRequest.Create

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

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

4 回答 4

13

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

请参阅:URI 和 URL 有什么区别?

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

于 2011-04-12T00:52:25.783 回答
8

从技术上讲,htttp://www.google.com是一个格式正确的 URL,根据URL 规范。被NotSupportedException抛出是因为htttp不是注册计划。如果它是一个格式不正确的 URL,你会得到一个UriFormatException. 如果您只关心 HTTP(S) URL,那么也只需检查方案。

于 2011-04-12T00:49:00.323 回答
4

@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;
    }
}
于 2014-07-23T11:52:15.320 回答
-2

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

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

}
于 2013-10-22T06:01:08.780 回答