Is there a URL validator on .Net?

2019-02-02 20:29发布

Is there a method to validate URLs in .Net, ASP.Net, or ASP.Net MVC?

5条回答
爷、活的狠高调
2楼-- · 2019-02-02 20:40

A faster way (probably) than using try/catch functionality would be to use Regex. If you had to validate 1000s of URLs catching the exception multiple times would be slow.

Here's a link to sample Regex- use Google to find more.

查看更多
何必那么认真
3楼-- · 2019-02-02 20:48

You can use Uri.IsWellFormedUriString, no need to create your own function for that:

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

Where uriKind can be:

UriKind.RelativeOrAbsolute 
UriKind.Absolute
UriKind.Relative

For more info see: http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

查看更多
Juvenile、少年°
4楼-- · 2019-02-02 20:49

The answers provided thusfar do not check for a scheme, allowing all kinds of unwanted input, which could make you vulnerable for javascript injection (see the comment of TheCloudlessSky).

An URI is just a unique identification of a object. "C:\Test" is a valid URI.

In my project I used the following code:

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

Define which schemes you will allow and change the code accordingly.

查看更多
叼着烟拽天下
5楼-- · 2019-02-02 20:50

You can use the Uri.TryCreate to validate an URL:

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

The comments suggest that TryCreate just moves the exception handling one level down. However, I checked the source code and found that this is not the case. There is no try/catch inside TryCreate, it uses a custom parser which should not throw.

查看更多
贪生不怕死
6楼-- · 2019-02-02 20:56
static bool IsValidUri(string urlString) {
   try {
      new Uri(urlString);
      return true;
   } catch {
      return false;
   }
}
查看更多
登录 后发表回答