2011-03-17 42 views
7

有了這樣一個http://abc.com/myid/ab%2fcd URL(其中%2F是一個轉義斜槓),asp.net將取消轉義的%2F,這樣從我的應用程序的角度來看(從asp.net的MVC的角度來看)的網址是:http://abc.com/myid/ab/cd如何讓asp.net不自動unescape在網址中跳過正斜槓?

由於我的應用程序使用的是asp.net mvc,因爲asp.net的unescaping會導致該路線不匹配,所以如果我想要指定類似「/ myid/{id}」的路由,此行爲很容易導致路由問題。

按照這個問題的答案:URL-encoded slash in URL,並根據這個MSDN網頁:http://msdn.microsoft.com/en-us/library/ee656542.aspx解決方案(在.NET 4.0中)是擺在你的web.config以下:

<uri> 
    <schemeSettings> 
     <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
    </schemeSettings> 
</uri> 

但我做不到實際上它沒有起作用 - 「%2f」仍然自動轉換爲「/」。有誰知道爲什麼配置設置可能不適合我,或有任何其他建議?

+0

它需要在machine.config ...或app.config中。 Web.config不會工作 – LamonteCristo 2013-11-21 15:33:07

回答

5

一個簡單的解決方案是使用全部標記,例如, {controller}/{action}/{*id}

+0

同意。建議路由中的{* id}會捕獲url路徑的其餘部分,包括路徑分隔符。在我看來,OP要求的是讓「id」等於「ab/cd」。所以@ Max的解決方案應該可以工作。 – 2011-08-18 19:55:23

+2

如果你的路徑中有其他東西,這將不起作用。例如,如果您正在構建其他API並擁有{entity}/{id}/{action} – mirhagk 2017-05-17 18:59:31

+0

無論執行何種邏輯,似乎也會將兩個斜槓歸結爲單斜槓。因此,如果您希望使用這種方法將url作爲路由參數進行編碼,那麼您需要查看其他地方。 – Nick 2017-07-20 15:33:19