.Net上有URL验证器吗?

pup*_*eno 36 .net asp.net validation url asp.net-mvc

有没有一种方法可以验证.Net,ASP.Net或ASP.Net MVC中的URL?

Dir*_*mar 45

您可以使用它Uri.TryCreate来验证URL:

public bool IsValidUri(string uri)
{
    Uri validatedUri;
    return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}
Run Code Online (Sandbox Code Playgroud)

评论表明TryCreate只需将异常处理降低一级.但是,我检查了源代码,发现情况并非如此.里面没有try/catch TryCreate,它使用了一个不应该抛出的自定义解析器.

  • **警告**:这种类型的验证**解决的一件事是javascript注入:`javascript:alert('hacked')`.因此,检查JavaScript协议很重要! (7认同)
  • 这与使用[`Uri.IsWellFormedUriString`](http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx)有什么不同? (4认同)
  • 这个响应被高估了,你提出的任何东西,例如"qwerty"都会被验证为Url,因为这种方法实际上不会检查Url.请参阅@Arjan回答那些正在搜索真实网址验证的人. (3认同)

小智 37

因此提供的答案不会检查方案,允许各种不需要的输入,这可能使您容易被javascript注入(请参阅TheCloudlessSky的评论).

URI只是对象的唯一标识."C:\ Test"是一个有效的URI.

在我的项目中,我使用了以下代码:

/// <summary>
/// Validates a URL.
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
private bool ValidateUrl(string url)
{
    Uri validatedUri;

    if (Uri.TryCreate(url, UriKind.Absolute, out Uri validatedUri)) //.NET URI validation.
    {
        //If true: validatedUri contains a valid Uri. Check for the scheme in addition.
        return (validatedUri.Scheme == Uri.UriSchemeHttp || validatedUri.Scheme == Uri.UriSchemeHttps);
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

定义允许的方案并相应地更改代码.

  • +1,这是最好的答案,也是唯一能真正回答“如何验证网址”的问题,即网址**! (2认同)

Lui*_*cha 15

你可以使用Uri.IsWellFormedUriString,不需要为此创建自己的函数:

public static bool IsWellFormedUriString(string uriString, uriKind uriKind);
Run Code Online (Sandbox Code Playgroud)

uriKind可以是:

UriKind.RelativeOrAbsolute 
UriKind.Absolute
UriKind.Relative
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

  • 这应该是公认的答案。这是 .Net 的 URL 验证器 (2认同)