我创建了一个新的ASP.NET MVC项目并实现了站点授权过滤器.
当我将路由映射到该{controller}/{action}对时,我将一个role ="SomeRole"默认传递给该路由.
如果我通过完整的url(http://localhost/somecontroller/someaction)并指定了完整的路径,它的工作原理非常好
MapRoute("SomeAction", "somecontroller/someaction",
new { controller = "SomeController", action = "SomeAction", role = "SomeRole");
Run Code Online (Sandbox Code Playgroud)
问题是,当有人访问时http://thesiteaddress.com,必须有一个默认路由,/home/index而不是/和我指定
MapRoute("Default", new { controller="somecontroller",action="action" });
Run Code Online (Sandbox Code Playgroud)
然后我失去role="SomeRole"了以前的MapRoute.
我怎么解决这个问题?
在我的博客中,我将URI存储在实体上以允许它们被定制(和友好).最初,它们可以包含空格(例如"/tags/ASP.NET MVC"),但W3C验证表明空格无效.
这个System.Uri类需要空格,并且似乎按照我想要的方式对它们进行编码(例如/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,它看起来像空格我也有效.