best URL validation

Your CheckURLValid is returning exactly what you have told it to.

To return True on all 4 URLs here are the issues

false: google.com

This is a relative url and you have specified UriKind.Absolute which means this is false.

false: https://www.google.com.my/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#newwindow=1&q=check%20if%20valid%20url%20c%23

This is an httpS (Secure) url and your method says

&& uriResult.Scheme == Uri.UriSchemeHttp;

which will limit you to only http addresses (NON secure)

To get the results you are wanting you will need to use the following method:

public static bool CheckURLValid(string strURL)
{
    Uri uriResult;
    return Uri.TryCreate(strURL, UriKind.RelativeOrAbsolute, out uriResult);
}

An alternative is to just use

Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute);

and not re implement functionality that all ready exists. If you wanted to wrap it it your own CheckUrlValid I would use the following:

public static bool CheckURLValid(string strURL)
{
    return Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute); ;
}

The main problem is that most strings are valid relative URL's so I would avoid using UriKind.RelativeOrAbsolute as google.com is an invalid url. Most web browsers silently add HTTP:// to the string to make it a valid url. HTTP://google.com is a valid url.


Not sure if I'm missing something here, but just so others don't waste their time with Uri.IsWellFormedUriString, note that the following test fails:

[TestMethod]
public void TestURLValidation()
{
    bool result = Uri.IsWellFormedUriString("bad", UriKind.RelativeOrAbsolute);
    Assert.IsFalse(result);
}

I.e., the prescribed answer will consider "bad" as a valid address. I believe that's not the behavior most users are after.

Tags:

C#

Asp.Net

Uri