为什么ASP.net MVC不能自动解码POST(又名Form)参数?

时间:2011-12-17 01:30:09

标签: asp.net-mvc asp.net-mvc-3

我已经使用System.Net.WebClient和ASP.net MVC 3网站完成了一些基本测试,我发现当绑定到动作的参数时,MVC会自动解码任何查询字符串如果使用GET,则已经过UrlEncoded的参数。但它不会自动解码POST参数。是否有一个原因?似乎是一种不必要的不​​便。

2 个答案:

答案 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控制器参数始终会被解码。