2013-08-27 23 views
1

我有一个自定义的HttpModule来重定向来自旧版本网站的旧版URL,该版本根据重定向的数据库表检查传入请求URL。带有加号的c#URL不能通过自定义HttpModule

但是,当传入的请求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" /> 

我在这里还是若有所失的设置?

回答

3

Scott Hanselmann写了一个nice blog post解释了如何在URL的路径部分启用各种废话符号。

他的结论是:

这一切的努力,让疯狂的事情在请求路径之后,它的 值得一提的是,简单地保持值作为查询 字符串的一部分(还记得回来的路上在这篇文章的开头?)更容易,更清洁,更灵活,更安全。

所以基本上如果你在url中有这样的字符,那些字符应该作为查询字符串参数传递,而不是试图在Path部分传递它们。

+0

感谢您的反馈意见。这确实可以解决我的问题,但是,我不想在该站点中打开安全漏洞,所以我已经推迟了我需要做的更改 - 但是如果我想要沿着这条路线走下去,这将解决问题。 –

2

默认情况下,IIS在URL中拒绝+。一种解决方法是allowDoubleEscaping

<system.webServer> 
    <security> 
      <requestFiltering allowDoubleEscaping="true" /> 
    </security> 
</system.webServer> 

但要注意,这可能使您的网站更容易受到恶意URL。

相关问题