2011-09-23 67 views
2

我在IIS 7上運行的舊WebForms站點上設置了ASP.net MVC 2.0。舊站點的404處理程序設置爲:400在IIS7上包含UrlRoutingModule的URL包含「&」的錯誤請求

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

這404處理程序是用來模擬URL重寫,所以像「/ + yes- & -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> 

一旦被添加,含有一個與符號的所有URL(例如 「/ +是 - & -no」 )返回:

壞請求

如何保持啓用UrlRoutingModule,仍然允許與ampersan網址d?

拒絕解決方案:

  1. 我能得到these registry changes的工作,但他們已經否決出於安全考慮。
  2. 我能夠使用URL重寫,改變「&」爲「和」,但有SEO的意義,因爲這改變了<H1>等

    <規則名稱=「RemoveIllegalAmpersands」 > <匹配URL = 「&)(+ 。)(。)」/ > <動作類型= 「重寫」 URL = 「{R:1}和{R:2}」/ > < /規則>

  3. 只見requestPathInvalidCharacters,web.config中元素,但我們不能嘗試它,因爲我們仍然在.NET 3.5

有沒有,我已經錯過了任何其他解決辦法?

+0

你有沒有運行一個路由調試器,如這裏引用的一個:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx?如果是,你看到你定義的路線發生了什麼? – counsellorben

+0

我只是添加它,並且它還在「/ + yes - & - no」上顯示「Bad Request」,順便說一下,它不是路由(它被髮送到Web Forms頁面)。壞請求似乎來自IIS本身。我在「/」上試過路由調試器,所有的路由看起來都是正確的。 –

+0

那麼你的解決方案是什麼? – jaminto

回答