ASP Mvc 3不会从JSON发布请求中自动发送

时间:2011-06-18 18:56:56

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

我有一个简单的控制器:

public class UserCredentials
{
   public string Username {get;set;}
   public string Password {get;set;}
}

public class AuthenticationController : Controller
{
    public ActionResult Authenticate(UserCredentials credentials)
    {
        // Do stuff
    }
}

还有一点简单的Jquery:

var credentials = {
    Username: "test",
    Password: "test"
};

$("#send-request").button().click(function() {
    var ajaxOptions = {
        url: "http://localhost:29097/authentication/",
        type: "POST",
        dataType: 'json',
        data: JSON.stringify(credentials),
        contentType: "application/json; charset=utf-8",
        success: function(result) { $("#result").html(result); }
    };
    $.ajax(ajaxOptions);
});

每当我点击页面上的按钮发送请求时,UserCredentials对象都包含两个属性的null ...我已经尝试通过fiddler直接发布JSON,也没有运气...我需要做什么什么特别的东西让这个工作?

- 编辑 -

我一直在仔细检查,似乎当数据离开客户端时,它在标头内正确地拥有了json数据。然而,当fiddler选择它时,它似乎不包含数据,看起来它正在进行OPTIONS调用:

OPTIONS http://localhost:29097/authentication/ HTTP/1.1
Host: localhost:29097
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,x-requested-with

如果它有助于我通过开发服务器运行MVC应用程序(想想它的名为Cassini)

2 个答案:

答案 0 :(得分:1)

尝试在客户端传递此JSON。

var credentials = { "credentials": { "UserName": "test", "Password": "test" } };

像上面一样调用jquery ajax 完全

在客户端构建JSON时,您必须考虑服务器端的参数,在这种情况下,此行凭据:< / p>

public ActionResult Authenticate(UserCredentials credentials)
{
    // Do stuff
}

答案 1 :(得分:0)

当您发送POST请求时 - 它必须是键值集合。无法查看JSON.stringify(凭据)的功能,但使用http://www.ieinspector.com/httpanalyzer/可以更轻松地解决您的问题。此工具将显示您要发送的请求的所有详细信息。