我有一个自定义的HttpModule来重定向来自网站的旧版本的旧版URL,该版本会根据重定向的数据库表检查传入的请求URL。
但是,当传入请求URL包含加号(+)时,请求不会通过HttpModule传递 - 它可以按标准URL的预期工作。
例如,这些网址有效:
http://www.example.com/sample-url
http://www.example.com/sample url
http://www.example.com/sample%20url
这些不是:
http://www.example.com/sample+url
http://www.example.com/sample%2Burl
这是我的模块声明:
<add name="LegacyUrlHttpModule" type="Web.LegacyUrlHttpModule, Framework.Web" preCondition="managedHandler" />
我错过了这里的设置还是什么?
答案 0 :(得分:3)
Scott Hanselmann写了一篇nice blog post
,解释了如何在网址的Path部分启用所有类型的垃圾符号。
他的结论如下:
在完成所有这些努力以获得请求路径中的疯狂内容之后,就是这样 值得一提的是,只需将值保留为Query的一部分 字符串(记得在这篇文章的开头回答?)更容易, 更清洁,更灵活,更安全。
所以基本上如果你在url中有这样的字符,那些字符应该作为查询字符串参数传递,而不是试图在Path部分中传递它们。
答案 1 :(得分:3)
默认情况下,IIS会拒绝网址中的+
。解决方法是allowDoubleEscaping
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
但请注意,这可能会使您的网站更容易受到恶意网址的攻击。</ p>
答案 2 :(得分:0)
您可以按照以下步骤操作: