2

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

在 PHP 上,我使用 urlencode 函数导致

原始的 base64 编码字符串是

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=

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

在这个调试之后,我检查了提琴手,确实它通过正确的 URLEncoded 字符串发送......

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

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3

因此,看起来 WebAPI 或 MVC 正在尝试自己进行一些前行 url 解码,但是它有两个问题:-

  • 它只是部分解码字符串,所以 + 和 / 符号得到正确转换,但 = 没有
  • 它似乎正在从 %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 自己......

任何指针将不胜感激

4

1 回答 1

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 解码。

于 2012-08-14T05:57:36.947 回答