我已经使用System.Net.WebClient和ASP.net MVC 3网站完成了一些基本测试,我发现当绑定到动作的参数时,MVC会自动解码任何查询字符串如果使用GET,则已经过UrlEncoded的参数。但它不会自动解码POST参数。是否有一个原因?似乎是一种不必要的不便。
答案 0 :(得分:12)
ASP.NET MVC默认模型绑定器使用Request.Form
提供程序读取POST值。此提供程序还会自动解码url编码的参数。
例如,如果您发送以下POST有效负载:
foo=%26&bar=%3D
在相应的控制器操作中,您将获得正确的值:
[HttpPost]
public ActionResult Test(string foo, string bar)
{
// foo equals &
// bar equals =
}
所以你可能没有正确地对请求进行url编码。
答案 1 :(得分:1)
如果您正在使用jQuery.Post并使用数据参数将数据作为POST数据发送,如下面的代码段所示,则jquery会自动为您编码。
var postdata = {
url: someUrl, //do not encodeURIComponent, it's done by jquery.post. test with some edge url if in doubt
};
$.post(serverUrl, postdata)
.done(function (data) {
};
如果您也编码自己,那么您将获得双重编码数据。无论是获取还是发布,Asp.net控制器参数始终会被解码。