是否有更好/更准确/更严格的方法/方法来确定网址格式是否正确?
使用:
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();
}
答案 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
是否等于http
或https
。
答案 1 :(得分:8)
从技术上讲,根据URL specification,htttp://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;
}