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

发布于 2024-10-31 10:22:47 字数 484 浏览 5 评论 0原文

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

使用:

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

无法捕获所有内容。如果我输入 htttp://www.google.com 并运行该过滤器,它就会通过。然后我稍后在调用 WebRequest.Create 时收到 NotSupportedException

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

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

Is there a better/more accurate/stricter method/way to find out if a URL is properly formatted?

Using:

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

Doesn't catch everything. If I type htttp://www.google.com and run that filter, it passes. Then I get a NotSupportedExceptionlater when calling WebRequest.Create.

This bad url will also make it past the following code (which is the only other filter I could find):

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

有木有妳兜一样 2024-11-07 10:22:47

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

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

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

The reason Uri.IsWellFormedUriString("htttp://www.google.com", UriKind.Absolute) returns true is because it is in a form that could be a valid Uri. URI and URL are not the same.

See: What's the difference between a URI and a URL?

In your case, I would check that new Uri("htttp://www.google.com").Scheme was equal to http or https.

攀登最高峰 2024-11-07 10:22:47

从技术上讲,htttp://www.google.com 是一个格式正确的网址,根据 URL 规范。由于 htttp 不是已注册的方案,因此引发了 NotSupportedException。如果 URL 格式不正确,您将收到 UriFormatException。如果您只关心 HTTP(S) URL,那么也只需检查该方案。

Technically, htttp://www.google.com is a properly formatted URL, according the URL specification. The NotSupportedException was thrown because htttp isn't a registered scheme. If it was a poorly-formatted URL, you would have gotten a UriFormatException. If you just care about HTTP(S) URLs, then just check the scheme as well.

苏璃陌 2024-11-07 10:22:47

@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;
    }
}

@Greg's solution is correct. However you can steel using URI and validate all protocols (scheme) that you want as valid.

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;
    }
}
别挽留 2024-11-07 10:22:47

这段代码可以很好地帮助我检查 Textbox 是否具有有效的 URL 格式

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

}

This Code works fine for me to check a Textbox have valid URL format

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文