Is there a URL validator on .Net?

后端 未结 5 576
失恋的感觉
失恋的感觉 2020-12-28 12:37

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

相关标签:
5条回答
  • 2020-12-28 12:50
    static bool IsValidUri(string urlString) {
       try {
          new Uri(urlString);
          return true;
       } catch {
          return false;
       }
    }
    
    0 讨论(0)
  • 2020-12-28 12:51

    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.

    0 讨论(0)
  • 2020-12-28 12:59

    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.

    0 讨论(0)
  • 2020-12-28 13:02

    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.

    0 讨论(0)
  • 2020-12-28 13:04

    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

    0 讨论(0)
提交回复
热议问题