在.Net、ASP.NET或ASP.NetMVC中是否有验证URL的方法?
cbeh67ev1#
您可以使用Uri.TryCreate来验证URL:
Uri.TryCreate
public bool IsValidUri(string uri){ Uri validatedUri; return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);}
public bool IsValidUri(string uri)
{
Uri validatedUri;
return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}
注解表明TryCreate只是将异常处理向下移动了一级。但是,我检查了源代码,发现情况并非如此。TryCreate内部没有try/catch,它使用了一个自定义的解析器,不应该抛出。
TryCreate
toe950272#
到目前为止提供的答案不检查方案,允许各种不需要的输入,这可能使您容易受到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;}
/// <summary>
/// Validates a URL.
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
private bool ValidateUrl(string url)
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;
定义您将允许的方案并相应地更改代码。
kqqjbcuj3#
你可以使用Uri.IsWellFormedUriString,不需要创建自己的函数:
public static bool IsWellFormedUriString(string uriString, uriKind uriKind);
在哪里uriKind可以:
UriKind.RelativeOrAbsolute UriKind.AbsoluteUriKind.Relative
UriKind.RelativeOrAbsolute
UriKind.Absolute
UriKind.Relative
有关更多信息,请参阅:http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx
wbgh16ku4#
如果你需要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
'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
dluptydi5#
比使用try/catch功能更快的方法(可能)是使用Regex。如果你必须验证1000个URL,多次捕获异常会很慢。这里是a link to sample Regex-使用谷歌找到更多。
w6mmgewl6#
在ASP.NET Core中,验证通常作为模型绑定的一部分(因此,在官方文档中称为模型验证)假设你有一个端点,比如:
public AppController: ControllerBase{ public async Task<IActionResult> GetValues(InputDto input) { ... }}
public AppController: ControllerBase
public async Task<IActionResult> GetValues(InputDto input) { ... }
你的InputDto模型是:
public class InputDto{ public string DownloadLink {get; set;}}
public class InputDto
public string DownloadLink {get; set;}
您的要求是验证DownloadLink的给定值应该是格式良好的URL。您可以使用为此目的而设计的内置属性:
DownloadLink
using System.ComponentModel.DataAnnotations;public class InputDto{ [Url] public string DownloadLink {get; set;}}
using System.ComponentModel.DataAnnotations;
[Url]
tgabmvqs7#
static bool IsValidUri(string urlString) { try { new Uri(urlString); return true; } catch { return false; }}
static bool IsValidUri(string urlString) {
try {
new Uri(urlString);
return true;
} catch {
7条答案
按热度按时间cbeh67ev1#
您可以使用
Uri.TryCreate
来验证URL:注解表明
TryCreate
只是将异常处理向下移动了一级。但是,我检查了源代码,发现情况并非如此。TryCreate
内部没有try/catch,它使用了一个自定义的解析器,不应该抛出。toe950272#
到目前为止提供的答案不检查方案,允许各种不需要的输入,这可能使您容易受到JavaScript注入的攻击(请参阅TheCloudlessSky的评论)。
URI只是对象的唯一标识。“C:\Test”是一个有效的URI。
在我的项目中,我使用了以下代码:
定义您将允许的方案并相应地更改代码。
kqqjbcuj3#
你可以使用Uri.IsWellFormedUriString,不需要创建自己的函数:
在哪里uriKind可以:
有关更多信息,请参阅:http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx
wbgh16ku4#
如果你需要Arjan提供的VB.Net中的漂亮代码,
dluptydi5#
比使用try/catch功能更快的方法(可能)是使用Regex。如果你必须验证1000个URL,多次捕获异常会很慢。
这里是a link to sample Regex-使用谷歌找到更多。
w6mmgewl6#
ASP.Net核心模型验证
在ASP.NET Core中,验证通常作为模型绑定的一部分(因此,在官方文档中称为模型验证)
假设你有一个端点,比如:
你的InputDto模型是:
您的要求是验证
DownloadLink
的给定值应该是格式良好的URL。您可以使用为此目的而设计的内置属性:
tgabmvqs7#