无法通过“application / json”正确传递参数

时间:2013-01-06 04:12:03

标签: asp.net-mvc-3 jquery

我试图整个上午找到一个解决方法(浏览SO中的所有相关帖子并自己做了几个实验),但都失败了。

这是服务器代码:

控制器:

[HttpGet]
    public JsonResult Test(Entity e)
    {
        return Json(new { success = true }, JsonRequestBehavior.AllowGet);
    }

实体:

public class Entity
{
    public string A { set; get; }

    public string B { set; get; }
}

使用客户端代码:

var e = {
        A: "1",
        B: "2"
    };

    $.ajax({
        url: "/Home/Test",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify(e)
        //                data: e
    });

我得到: notfine

使用客户端代码:

var e = {
        A: "1",
        B: "2"
    };

    $.ajax({
        url: "/Home/Test",
        //contentType: "application/json; charset=utf-8",
        dataType: "json",
        //data: JSON.stringify(e)
        data: e
    });

我得到: fine

希望找到答案,coz application / json更有用

修改

当我将协议更改为 POST 时,可以正确传递参数。 这是一个新问题:为什么不获取?因为转换后的请求查询字符串不符合mvc3的需要吗?

EDIT2

http://forums.asp.net/t/1766534.aspx/1

似乎所有问题都在 GET 方法上。 GET 不应该通过复杂的参数?如果你是restFUL的粉丝那就非常奇怪

1 个答案:

答案 0 :(得分:1)

尝试指定请求类型(尽管默认情况下默认为GET):

var e = {
            A: "1",
            B: "2"
        };

$.ajax({
            type: "GET",
            url: "/Home/Test",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: JSON.stringify(e)
});

或尝试使用POST请求并使用JsonResult属性修饰[HttpPost]操作方法:

[HttpPost]
public JsonResult Test(Entity e)
{
     return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}

然后

$.ajax({
            type: "POST",
            url: "/Home/Test",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: JSON.stringify(e)
      });