.Net上有URL验证器吗?

时间:2009-05-29 19:59:35

标签: .net asp.net asp.net-mvc validation url

是否有方法验证.Net,ASP.Net或ASP.Net MVC中的URL?

6 个答案:

答案 0 :(得分:43)

您可以使用Uri.TryCreate验证网址:

public bool IsValidUri(string uri)
{
    Uri validatedUri;
    return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}

评论表明TryCreate只是将异常处理向下移动一级。但是,我检查了源代码,发现情况并非如此。 TryCreate内没有try / catch,它使用了不应该抛出的自定义解析器。

答案 1 :(得分:34)

因此提供的答案不会检查方案,允许各种不需要的输入,这可能使您易于注入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;
}

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

答案 2 :(得分:15)

您可以使用Uri.IsWellFormedUriString,无需为此创建自己的函数:

public static bool IsWellFormedUriString(string uriString, uriKind uriKind);

uriKind可以在哪里:

UriKind.RelativeOrAbsolute 
UriKind.Absolute
UriKind.Relative

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

答案 3 :(得分:1)

如果你需要来自 Arjan 的 VB.Net 中的漂亮代码

    'Validates a URL.
    Function ValidateUrl(url As String) As Boolean
        Dim validatedUri As Uri = Nothing
        If (Uri.TryCreate(url, UriKind.Absolute, validatedUri)) Then
            Return (validatedUri.Scheme = Uri.UriSchemeHttp Or validatedUri.Scheme = Uri.UriSchemeHttps)
        End If
        Return False
    End Function

答案 4 :(得分:0)

static bool IsValidUri(string urlString) {
   try {
      new Uri(urlString);
      return true;
   } catch {
      return false;
   }
}

答案 5 :(得分:0)

比使用try / catch功能更快(可能)的方法是使用Regex。如果你必须验证1000多个URL,那么多次捕获异常会很慢。

以下是a link to sample Regex - 使用Google查找更多内容。