.Net 上有 URL 验证器吗?

问题描述 投票:0回答:7

是否有一种方法可以验证 .Net、ASP.Net 或 ASP.Net MVC 中的 URL?

.net asp.net asp.net-mvc validation url
7个回答
52
投票

您可以使用

Uri.TryCreate
来验证 URL:

public bool IsValidUri(string uri)
{
    Uri validatedUri;
    return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}

评论表明

TryCreate
只是将异常处理下移了一级。然而我查看了源码,发现并不是这样的。
TryCreate
内部没有try/catch,它使用了一个不应抛出异常的自定义解析器。


48
投票

到目前为止提供的答案没有检查方案,允许各种不需要的输入,这可能使您容易受到 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;
}

定义您将允许哪些方案并相应地更改代码。


29
投票

您可以使用 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


3
投票

如果您需要 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

0
投票

(可能)比使用 try/catch 功能更快的方法是使用正则表达式。如果您必须验证 1000 个 URL,则多次捕获异常会很慢。

这里是 示例正则表达式的链接 - 使用 Google 查找更多信息。


0
投票

ASP.Net Core 模型验证

在 ASP.Net Core 中,通常将验证作为模型绑定的一部分(因此在官方文档中称为模型验证)

假设您有一个端点,例如:

public AppController: ControllerBase
{
      public async Task<IActionResult> GetValues(InputDto input) { ... }
}

你的InputDto模型是:

public class InputDto
{
      public string DownloadLink {get; set;}
}

您的要求是验证

DownloadLink
的给定值应该是格式良好的 URL。
您可以使用为此目的而设计的内置属性

using System.ComponentModel.DataAnnotations;
public class InputDto
{
    [Url]  
    public string DownloadLink {get; set;}
}

-2
投票
static bool IsValidUri(string urlString) {
   try {
      new Uri(urlString);
      return true;
   } catch {
      return false;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.