2012-08-13 125 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