使用 jQuery 数据属性将参数传递给 Web api 控制器

Pass parameters to web api controller with jQuery data attribute

我有这个 jQuery 电话:

jQuery.ajax({
            type: "POST",
            url: "http://localhost:5832/api/Login/Post",
            data: JSON.stringify({ username: 'user12', password: '1234' }),
            contentType: "application/json; charset=utf-8", 
            dataType: "json",
            success: function (data) {
                alert(data.d);
            }
        });

调用此网站 api 控制器操作:

[System.Web.Http.AcceptVerbs("POST")]
[System.Web.Http.HttpPost]
public HttpResponseMessage Post(string username, string password)
{
    string authenticationToken = "";
    authenticationToken = hpl.LoginUser(username, password);
    //Some other code

    return Request.CreateResponse(HttpStatusCode.OK, authenticationToken);
}

我正在尝试提交具有数据属性的参数,但未触发调用。

当我将 url 更改为: http://localhost:5832/api/Login/Post?username=1&password=2

我可以进行控制器操作。

如何将参数作为 jquery 调用的数据属性的一部分而不是查询字符串参数传递?

ASP.Net Web API 不支持请求正文中的多个参数。

您只能使用 FromBody 属性发送一个参数,因此不要使用多个参数,只需使用一个包含您需要的任何 属性 的对象:

public class LoginModel {
    public string username { get; set; }

    public string password { get; set; }
}

[System.Web.Http.HttpPost]
public HttpResponseMessage Post([FromBody] LoginModel loginModel)
{
    string authenticationToken = "";
    authenticationToken = hpl.LoginUser(loginModel.username, loginModel.password);
    //Some other code

    return Request.CreateResponse(HttpStatusCode.OK, authenticationToken);
}

顺便说一句:AcceptVerbs("POST")HttpPost 属性是多余的,使用其中之一,但不要同时使用。