400个包含“&”的网址错误请求在IIS7上使用UrlRoutingModule

时间:2011-09-23 18:30:18

标签: asp.net-mvc-2 iis-7 url-routing asp.net-mvc-routing

我在一个在IIS 7上运行的旧WebForms站点上设置ASP.net MVC 2.0。旧站点有一个404处理程序设置如下:

<httpErrors errorMode="Custom">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="C:\..." path="/error404.aspx" responseMode="ExecuteURL" />
</httpErrors>

这个404处理程序用于模拟URL重写,因此像“/ + yes-&amp; -no”这样的URL会被路由到它,而Server.Transfer()会被编辑到正确的页面。一切正常。

在设置ASP.net MVC 2.0时,我将其添加到web.config:

<modules runAllManagedModulesForAllRequests="false">
    <remove name="UrlRoutingModule" />
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>

添加此内容后,所有包含&符号的网址(例如“/ + yes-&amp; -no”)都会返回:

  

错误请求

如何启用UrlRoutingModule,并且仍允许带符号的网址?

拒绝解决方案:

  1. 我能够让these registry changes工作,但他们已被排除在安全问题之外。
  2. 我能够使用网址重写来更改“&amp;”到“和”,但这有SEO含义,因为它会改变&lt; h1&gt;等等。

    &lt; rule name =“RemoveIllegalAmpersands”&gt;     &lt; match url =“(+。)&amp;(。))”/&gt;     &lt; action type =“Rewrite”url =“{R:1}和{R:2}”/&gt; &LT; /规则&GT;

  3. 我看到了requestPathInvalidCharacters,web.config元素,但我们无法尝试,因为我们仍在使用.NET 3.5

  4. 还有其他我错过的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您是否看过Hanselman的这篇文章?

http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

他描述了如何调整哪些字符被视为无效(在他的博客文章中查找requestPathInvalidCharacters)。

请注意,如果你调整它,有几个地雷需要注意。