所以我在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本身正试图进行一些草书前的解码,但是它有两个问题: -
之前有没有人遇到过这个问题?要复制它,只需使用
创建一个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 ......
任何指示都将不胜感激
答案 0 :(得分:0)
我无法使用ASP.NET MVC 4 RC重现这一点。
步骤:
添加API控制器:
public class ValuesController : ApiController
{
public string Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
{
return signature;
}
}
导航至/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
结果:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=</string>
signature
参数已正确解析网址。