2017-07-25 166 views
0

我有一個MVC web應用程序。特定區域的URL進來爲:如何修改或處理MVC中的URL特殊字符?

http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs

這會導致一個「的資源不能被發現。」錯誤。但是,如果我改變的URL

http://localhost/General/Bpa?application=Trf#/GeneralInputs

然後一切正常。我可以從使用一些路由調試技巧中看出,第一種情況下的控制器是:「Bpa?application = Trf#」,而第二種是:「Bpa」,這是正確的。我如何解釋這個或替代編碼的字符?

+0

該URL沒有正確編碼。 – Amy

+1

URL的來源是應該放置修補程序的位置,而不是在您的應用程序中。它看起來像我的雙重編碼。 – JuanR

+0

這是因爲您的網址包含不安全的字符。您可以在這裏閱讀更多信息:https://www.raymond.cc/blog/decoding-percent-with-numbers-encoding-in-urls/ –

回答

2

你會想用這個你的網址:

string fixedUrl = System.Uri.UnescapeDataString(yourUrlHere); 

希望對你有用了!

+2

謝謝,Capn傑克。下一個Capn Morgan在我身上。 – wandercoder

+0

阿哈沒問題:) –

3

第一個URL的編碼錯誤。如果你看一下RFC 3986你會在2.4發現該段

當URI被廢棄時,組件和子組件
顯著的具體方案,非關聯化過程(如果有的話)
必須被分析之前分離這些組件內的百分比編碼的八位位組可以被安全地解碼,否則數據可能被錯誤地作爲組件分隔符的

這意味着URL被未編碼字符分解(在本例中爲?)。如果使用編碼的字符串#3f,那麼框架將不得不尋找名爲「Bpa?application=Trf#」的控制器而不是「Bpa」。因此返回404 /資源未找到。

你不應該修復它在服務器端;您將不得不更改生成錯誤網址http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs的地方。