我有一个ASP.NET MVC应用程序,其路由允许通过/ search/<searchterm>搜索内容.
当我提供"search/abc"时,它运行良好,但是当我提供"/ search/a + b + c"(正确的url编码)时,IIS7拒绝HTTP错误404.11 的请求(请求过滤模块配置为拒绝请求包含双转义序列).首先,它为什么这样做?它似乎只是抛出错误,如果它是URL的一部分,但不作为查询字符串的一部分(/ transmit?q = a + b + c工作正常).
现在我可以在我的web.config的安全部分启用双转义请求,但我不愿意这样做,因为我不明白其含义,也没有为什么服务器拒绝请求"a + b + c"为URL的一部分,但作为查询字符串的一部分接受.
有人可以解释并提供一些建议吗?
在我的博客中,我将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,它看起来像空格我也有效.
我很确定无法做到这一点,但我正在寻找一种黑客或方法将+放在文件夹名称中,比如
http://www.mysite.com/cats+dogs/Default.aspx
我正在使用IIS 7,并尝试创建一个虚拟目录来实现这一点,但它没有用.我不允许将%2B放在资源管理器文件夹或虚拟文件夹名称中.
任何想法我怎么能破解它使它工作?我们已经打印了带有网址的小册子,并且想知道是否有某些方法可以将其替换或者可以做到的一些技巧.
编辑:我能够通过创建一个带有+的虚拟文件夹来解决这个问题,然后重定向到一个URL,该URL指向带有内容的虚拟目录.