c#带有加号的URL未通过自定义HttpModule运行
本文关键字:自定义 HttpModule 运行 URL | 更新日期: 2023-09-27 18:29:08
我有一个自定义的HttpModule来重定向旧版本网站中的旧URL,该模块根据重定向数据库表检查传入请求的URL。
然而,当传入的请求URL包含加号(+)时,请求不会通过HttpModule——它可以正常工作于标准URL。
例如,这些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" />
我是不是错过了这里的布景?
nice blog post
,解释了如何在url的Path部分启用各种垃圾符号。
他的结论如下:
经过这么多努力在请求路径中获得疯狂的东西值得一提的是,只需将值作为查询的一部分字符串(还记得这篇文章开头的吗?)更容易,更清洁、更灵活、更安全。
因此,基本上,如果url中有这样的字符,那么这些字符应该作为查询字符串参数传递,而不是试图在Path部分传递它们。
IIS默认拒绝URL中的+
。解决方法是allowDoubleEscaping
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
但请注意,这可能会使您的网站更容易受到恶意URL的攻击。
您可以按照以下步骤操作:
- 在IIS Web服务器部分,双击"请求筛选"图标
- 在"文件名扩展名"中右键单击->编辑功能设置…'文件"web.config"
- 选中"允许双重转义"选项(默认情况下未选中此选项)
- 对于"默认网站"(或您为网站指定的名称),重复以上3个步骤
- 重新启动IIS