WebAPI仅部分解码URL编码字符串

时间:2012-08-13 19:06:17

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

所以我在ASP.NET上使用WebAPI编写REST应用程序。我遇到了一个问题。

在PHP上我使用urlencode函数导致

原始base64编码的字符串是

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=

在通过urlencode运行它后,我得到: - kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

在调试之后,我检查了fiddler并确实发送了正确的URLEncoded字符串......

现在,当它进入ASP.NET MVC WebAPI时,我得到: -

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3

所以看起来WebAPI或MVC本身正试图进行一些草书前的解码,但是它有两个问题: -

  • 它仅部分解码字符串,因此+和/符号正确转换但=不
  • 它似乎是从%3D截断D,导致%3不是有效的URL字符。

之前有没有人遇到过这个问题?要复制它,只需使用

创建一个Web应用程序
public TokenAPI Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
{
}

并传入值

/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 ......

任何指示都将不胜感激

1 个答案:

答案 0 :(得分: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>
    
  5. signature参数已正确解析网址。