【发布时间】:2010-10-29 23:53:48
【问题描述】:
有没有一种方法可以在 .Net、ASP.Net 或 ASP.Net MVC 中验证 URL?
【问题讨论】:
标签: .net asp.net asp.net-mvc validation url
有没有一种方法可以在 .Net、ASP.Net 或 ASP.Net MVC 中验证 URL?
【问题讨论】:
标签: .net asp.net asp.net-mvc validation url
如果您需要来自 Arjan 的 VB.Net 中的漂亮代码
'Validates a URL.
Function ValidateUrl(url As String) As Boolean
Dim validatedUri As Uri = Nothing
If (Uri.TryCreate(url, UriKind.Absolute, validatedUri)) Then
Return (validatedUri.Scheme = Uri.UriSchemeHttp Or validatedUri.Scheme = Uri.UriSchemeHttps)
End If
Return False
End Function
【讨论】:
到目前为止提供的答案并未检查方案,允许各种不需要的输入,这可能使您容易受到 javascript 注入(请参阅 TheCloudlessSky 的评论)。
URI 只是对象的唯一标识。 "C:\Test" 是一个有效的 URI。
在我的项目中,我使用了以下代码:
/// <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;
}
定义您将允许的方案并相应地更改代码。
【讨论】:
您可以使用 Uri.IsWellFormedUriString,无需为此创建自己的函数:
public static bool IsWellFormedUriString(string uriString, uriKind uriKind);
uriKind 可以在哪里:
UriKind.RelativeOrAbsolute
UriKind.Absolute
UriKind.Relative
欲了解更多信息,请参阅:http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx
【讨论】:
您可以使用Uri.TryCreate 来验证 URL:
public bool IsValidUri(string uri)
{
Uri validatedUri;
return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}
cmets 建议TryCreate 只是将异常处理下移一级。但是,我检查了源代码,发现并非如此。 TryCreate 内部没有 try/catch,它使用了一个不应抛出的自定义解析器。
【讨论】:
Uri.IsWellFormedUriString有什么不同吗?
javascript:alert('hacked')。因此,检查 javascript 协议很重要!
比使用 try/catch 功能更快的方法(可能)是使用 Regex。如果您必须验证 1000 个 URL,多次捕获异常会很慢。
这里是a link to sample Regex- 使用 Google 查找更多信息。
【讨论】:
static bool IsValidUri(string urlString) {
try {
new Uri(urlString);
return true;
} catch {
return false;
}
}
【讨论】: