我使用以下代码检查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
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是一个有效的网址.
| 归档时间: |
|
| 查看次数: |
15841 次 |
| 最近记录: |