C# WebAPI仅对URL编码字符串进行部分解码
因此,我正在ASP.NET上使用WebAPI编写一个REST应用程序。我遇到了一个问题 在PHP上,我使用urlencode函数 原始的base64编码字符串为C# WebAPI仅对URL编码字符串进行部分解码,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,因此,我正在ASP.NET上使用WebAPI编写一个REST应用程序。我遇到了一个问题 在PHP上,我使用urlencode函数 原始的base64编码字符串为 kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc= 在PHP上通过urlencode运行后,我得到:- kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D 在这个调试之后,我检查了fiddler,实际上是它通过正确的URLEncoded字符串发送 现
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=
在PHP上通过urlencode运行后,我得到:-
kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D
在这个调试之后,我检查了fiddler,实际上是它通过正确的URLEncoded字符串发送
现在,当谈到ASP.NET MVC WebAPI时,我得到:-
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3
因此,看起来WebAPI或MVC正试图自己进行一些预草书url解码,但它有两个问题:-
- 它只是对字符串进行部分解码,因此+和/号可以正确转换,而=不能
- 它似乎正在截断%3D中的D,这将导致%3不是有效的URL字符李>
public TokenAPI Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
{
}
并传递值
/api/GenerateToken?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&调用方=e1af32bb-ac84-4f45-b4d6-67f7543ffa2&ip=127.0.0.1&事件id=f6d71c3d-ef00-41e1-8dec-a37bdf7484&签名=kA%2b1n8i00qcjpngpuq8yqerscbqow5hvb3%2FWubyGTc%3D
然后检查signature参数,您会发现它只被自己部分解码
非常感谢您的指点我无法用ASP.NET MVC 4 RC重现这一点 步骤:
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-67f7543ffa2&ip=127.0.0.1和eventID=f6d71c3d-ef00-41e1-8dec-a37bdf7484和签名=kA%2b1n8i00qcjpngpuq8yqerscbqow5hvb3%2FWubyGTc%3D
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=</string>
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=
签名
参数已正确进行url解码。我无法使用ASP.NET MVC 4 RC重现此结果
步骤:
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-67f7543ffa2&ip=127.0.0.1和eventID=f6d71c3d-ef00-41e1-8dec-a37bdf7484和签名=kA%2b1n8i00qcjpngpuq8yqerscbqow5hvb3%2FWubyGTc%3D
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=</string>
kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=
签名
参数的url解码正确。Ugh,好的,谢谢@DarinDimitrov,我会试着弄清楚发生了什么。移除所有过滤器等,etc将发回任何发现。呃,好的,谢谢@DarinDimitrov,我会尝试找出发生了什么。移除所有过滤器等,并将发现的结果发回。