2013-08-27 46 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。

相關問題