【发布时间】:2017-08-16 07:16:26
【问题描述】:
在我们的 ASP.MVC 项目中,我们使用 DataAnnotations 属性进行验证。其中一个字段应包含 Url,并标有 [Url] 属性。但是,如果我将 http://localhost:13030 放入字段值中,则它不会通过验证。
有什么方法可以使用属性将localhost定义为有效目标?
【问题讨论】:
标签: c# asp.net-mvc validation data-annotations
在我们的 ASP.MVC 项目中,我们使用 DataAnnotations 属性进行验证。其中一个字段应包含 Url,并标有 [Url] 属性。但是,如果我将 http://localhost:13030 放入字段值中,则它不会通过验证。
有什么方法可以使用属性将localhost定义为有效目标?
【问题讨论】:
标签: c# asp.net-mvc validation data-annotations
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。
【讨论】:
扩展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 上运气不好。
【讨论】:
只需使用“127.0.0.1”而不是“localhost”。例如http://127.0.0.1:13030
【讨论】: