在我的博客中,我将 URI 存储在实体上以允许它们被定制(和友好)。最初,它们可以包含空格(例如“/tags/ASP.NET MVC”),但 W3C 验证表明空格无效。System.Uri
class 需要空格,并且似乎按照我的意愿对它们进行编码(例如 /tags/ASP.NET MVC
变成 /tags/ASP.NET%20MVC
),但我不想创建一个 Uri
直接扔了,感觉脏!
注意:Html.Encode
都没有, Html.AttributeEncode
和 Url.Encode
将编码 "/tags/ASP.NET MVC"
至 "/tags/ASP.NET%20MVC"
.
编辑:我编辑了 DataType
我的问题的一部分,因为事实证明 DataType 不直接提供任何验证,并且没有内置的 URI 验证。我在 dataannotationsextensions.org 找到了一些额外的验证器但它只支持绝对 URI,而且看起来空格在那里也有效。
最佳答案
似乎唯一明智的做法是不允许 URL 中有空格。在 .NET 中对它们正确编码的支持似乎很不稳定:(
当我自动生成它们时,我将用破折号替换空格,并验证它们仅包含某些字符(字母数字、点、破折号、斜线)。
我认为使用它们的最佳方法是将 %20 存储在 DB 中,因为空间是“不安全的”,然后以通过 .NET 中的 W3C 验证器的方式对它们进行编码似乎很重要。
关于asp.net-mvc - 我应该在数据库中的 URL 中存储空格吗?如果是这样,将它们放入 <a href ="..."> 时如何对它们进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008007/