2012-08-13 124 views
2

因此,我正在ASP.NET上使用WebAPI編寫REST應用程序。我絆倒了一個問題。WebAPI僅部分解碼URL編碼字符串

在PHP我使用的是用urlencode功能導致

編碼字符串原來的base64通過進行urlencode運行它之後是

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=

在PHP我得到: - kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

在調試之後,我檢查了fiddler,並確實發送了正確的URLEncoded字符串...

現在,當它到達ASP.NET MVC的WebAPI我得到: -

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3

所以它看起來像的We​​bAPI或MVC正試圖通過自己做一些草書預URL解碼,但是它得到兩個問題與它: -

  • 它僅部分解碼字符串,所以+和/符號得到正確地轉換,但=不
  • 這似乎是截斷從%3D這導致了d在%3中,這不是有效的URL字符。

有沒有人遇到過這個問題?要複製它,只需創建

public TokenAPI Get(Guid caller, Guid id, string ip, string signature, Guid eventID) 
{ 
} 

一個Web應用程序,並傳入值

/api/GenerateToken?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&caller=e1af32bb-ac84-4f45-b4d6-67f7543ffab2&ip=127.0.0.1&eventID=f6d71c3d-ef00-41e1-8dec-a3a77bdf7484&signature=kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

然後檢查簽名參數,你會發現它只是部分本身URLDecoded .. 。

任何指針將衷心感謝

回答

0

我無法與ASP.NET MVC 4 RC重現此。

步驟:

  1. 創建一個新的空ASP.NET MVC 4應用
  2. 添加API控制器:

    public class ValuesController : ApiController 
    { 
        public string Get(Guid caller, Guid id, string ip, string signature, Guid eventID) 
        { 
         return signature; 
        } 
    } 
    
  3. 導航到/api/values?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&caller=e1af32bb-ac84-4f45-b4d6-67f7543ffab2&ip=127.0.0.1&eventID=f6d71c3d-ef00-41e1-8dec-a3a77bdf7484&signature=kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

  4. 結果:

    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=</string> 
    

signature參數被正確的url解碼。

+0

呃,好的,謝謝@DarinDimitrov我會試着弄清楚接下來會發生什麼。刪除所有過濾器等等將回發任何調查結果。 – 2012-08-14 09:58:36