【问题标题】:Url validation attribute marks `localhost` as invalid UrlUrl 验证属性将 `localhost` 标记为无效的 Url
【发布时间】:2017-08-16 07:16:26
【问题描述】:

在我们的 ASP.MVC 项目中,我们使用 DataAnnotations 属性进行验证。其中一个字段应包含 Url,并标有 [Url] 属性。但是,如果我将 http://localhost:13030 放入字段值中,则它不会通过验证。

有什么方法可以使用属性将localhost定义为有效目标?

【问题讨论】:

    标签: c# asp.net-mvc validation data-annotations


    【解决方案1】:

    UrlAttribute 验证源代码中显示的 RegEx:https://github.com/Microsoft/referencesource/blob/master/System.ComponentModel.DataAnnotations/DataAnnotations/UrlAttribute.cs#L46

    http://localhost 不匹配,因为它缺少 .

    有关其他选项,请参阅此答案:How I can validate urls in C# for localhost

    编辑:根据源代码,您可以将dataAnnotations:dataTypeAttribute:disableRegEx 添加到您的AppSettings 并将其值设置为true。这将导致UrlAttribute 验证过程检查它是否以http://https://ftp:// 开头。请参阅同一源文件的Line 33

    【讨论】:

      【解决方案2】:

      扩展Kirk Larkin's answer:根据dotnet pull request #668 (re-add ASPNET472CompatDoc)"dataAnnotations:dataTypeAttribute:disableRegEx" 应用设置仅从 .NET Framework 4.6.1 开始可用。

      我还通过下载 .NET Framework 4.6 (58 MB .zip) 和 4.6.1 RTM (59 MB .zip) 源并运行以下 git diff 命令进行了检查。

      git diff D:/src/dotnet46/Source/ndp/fx/src/xsp/system/DataAnnotations/DataAnnotations/UrlAttribute.cs D:/src/dotnet461RTM/Source/ndp/fx/src/xsp/system/DataAnnotations/DataAnnotations/UrlAttribute.cs
      

      确实,新的 4.6.1 internal static class AppSettings 是新的 4.6.1 应用设置。

      而且......我添加这个答案的意思是我在 net452 上运气不好。

      【讨论】:

        【解决方案3】:

        只需使用“127.0.0.1”而不是“localhost”。例如http://127.0.0.1:13030

        【讨论】:

          猜你喜欢
          • 2013-03-28
          • 2012-11-29
          • 2018-04-02
          • 1970-01-01
          • 1970-01-01
          • 2014-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多