Url验证属性将`localhost`标记为无效的Url

时间:2017-08-16 07:16:27

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

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

有没有办法使用该属性将localhost定义为有效目标?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

展开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上运气不好。

答案 2 :(得分:0)

只需使用“ 127.0.0.1”代替“ localhost”即可。例如http://127.0.0.1:13030