最佳URL验证

use*_*239 11 c# asp.net uri

我使用以下代码检查URL验证:

 public static bool CheckURLValid(string strURL)
  {
       Uri uriResult;
       return Uri.TryCreate(strURL, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
  }
Run Code Online (Sandbox Code Playgroud)

下面的结果应该显示为true,但不知何故它有自己的模式来验证url:

false:google.com

是的:http://www.google.com

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

true:https://stackoverflow.com/questions/ask

即时通讯使用c#,如何增强此检查网址验证更准确?

Rub*_*der 17

您的CheckURLValid正在返回您告诉它的内容.

要在所有4个URL上返回True是问题

false:google.com

这是一个相对URL,你已经指定了UriKind.Absolute,这意味着这是假的.

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

这是一个httpS(安全)网址,你的方法说

&& uriResult.Scheme == Uri.UriSchemeHttp;
Run Code Online (Sandbox Code Playgroud)

这将限制您只有http地址(非安全)

要获得您想要的结果,您需要使用以下方法:

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

另一种方法是使用

Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute);
Run Code Online (Sandbox Code Playgroud)

而不是重新实现所有准备就绪的功能.如果你想把它包装成你自己的CheckUrlValid我将使用以下内容:

public static bool CheckURLValid(string strURL)
{
    return Uri.IsWellFormedUriString(strURL, UriKind.RelativeOrAbsolute); ;
}
Run Code Online (Sandbox Code Playgroud)

主要问题是大多数字符串都是有效的相对URL,所以我会避免使用UriKind.RelativeOrAbsolute,因为google.com是一个无效的网址.大多数Web浏览器以静默方式将HTTP://添加到字符串中,以使其成为有效的URL. HTTP://google.com是一个有效的网址.