【问题标题】:How I can validate urls in C# for localhost我如何在 C# 中验证 localhost 的 url
【发布时间】:2017-11-09 16:01:43
【问题描述】:

我在 MVC 中使用 UrlAttribute

但它不接受本地主机 URL,例如 http://localhost/GCWeb

[Url(ErrorMessage = "please_enter_valid_ftp_url", ErrorMessage = null)] 
public string Url { get; set; }

这会验证 url,但不会验证 localhost url。

我该怎么做?

【问题讨论】:

  • 为本地主机分配一个域名,例如 mysampleapp.com。您可以通过将 localhost IP 映射到 hosts 文件中的此应用程序名称来实现。或者看这里 - codeproject.com/Articles/1463/…
  • 来源在这里:referencesource.microsoft.com/… 似乎你只需要匹配给定的正则表达式 - 这太棒了
  • 您有ErrorMessage = "please_enter_valid_ftp_url"ErrorMessage = null,我认为需要删除带有null 的那个。

标签: c# asp.net-mvc


【解决方案1】:

我还建议创建一个自定义验证器属性类。但我想使用 System.Uri 类来验证而不是自定义个人正则表达式。

public class UriAttribute: ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        Uri uri;
        bool valid = Uri.TryCreate(Convert.ToString(value), UriKind.Absolute, out uri);

        if (!valid)
        {
            return new ValidationResult(ErrorMessage);
        }
        return ValidationResult.Success;
    }
}

通过使用 System.Uri 类,我们可以避免自己的正则表达式出错的机会。

【讨论】:

    【解决方案2】:

    如果我猜对了,您可以使用自定义 ValidationAttribute。在 Models 命名空间中添加这个类

    public class UrlValidator : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                var x = value.ToString();
                if (Regex.IsMatch(x, @"^http:\/\/\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\w]*)*$", RegexOptions.IgnoreCase))
                {
                    return ValidationResult.Success;
                }
                else
                {
                    return new ValidationResult(ErrorMessage);
                }
            }
            else
            {
                return new ValidationResult("Please enter some value");
            }
        }
    }
    

    并像使用它一样

    [UrlValidator(ErrorMessage = "please_enter_valid_ftp_url")] 
    public string Url { get; set; }
    

    当然,您可以修改正则表达式以满足您的要求。我在这个特定示例中使用的那个对像这样的地址有效

    http://example
    http://example.com
    http://127.0.0.1
    

    【讨论】:

      【解决方案3】:

      您可以使用 127.0.0.1:portNumber。也许这会有所帮助。

      【讨论】:

        【解决方案4】:

        关于URLAttribute code,您有 3 个选项:

        1. 使用 IP 地址代替 localhost
        2. 使用有效的 url 并在主机文件中插入条目
        3. 创建新的 URLAttribute 扩展并忽略那里的 Localhost

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          • 2014-05-11
          • 2014-01-06
          • 2014-08-14
          • 1970-01-01
          • 1970-01-01
          • 2011-04-24
          相关资源
          最近更新 更多