web-dev-qa-db-ja.com

MVC Web API、エラー:複数のパラメーターをバインドできません

パラメータを渡すとエラーが発生します。

「複数のパラメーターをバインドできません」

ここに私のコードがあります

[HttpPost]
public IHttpActionResult GenerateToken([FromBody]string userName, [FromBody]string password)
{
    //...
}

Ajax:

$.ajax({
    cache: false,
    url: 'http://localhost:14980/api/token/GenerateToken',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: { userName: "userName",password:"password" },

    success: function (response) {
    },

    error: function (jqXhr, textStatus, errorThrown) {

        console.log(jqXhr.responseText);
        alert(textStatus + ": " + errorThrown + ": " + jqXhr.responseText + "  " + jqXhr.status);
    },
    complete: function (jqXhr) {

    },
})
13
Tom

参照: ASP.NET Web APIのパラメーターバインディング-[FromBody]の使用

最大で1つのパラメーターがメッセージ本文からの読み取りを許可されます。したがって、これは機能しません

// Caution: Will not work!    
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }

このルールの理由は、リクエスト本文が、一度しか読み取れないバッファリングされていないストリームに格納される可能性があるためです。

エンファシス鉱山

それは言われています。予想される集計データを保存するモデルを作成する必要があります。

public class AuthModel {
    public string userName { get; set; }
    public string password { get; set; }
}

次に、アクションを更新して、そのモデルを本文に含めるようにします

[HttpPost]
public IHttpActionResult GenerateToken([FromBody] AuthModel model) {
    string userName = model.userName;
    string password = model.password;
    //...
}

ペイロードを適切に送信することを確認する

var model = { userName: "userName", password: "password" };
$.ajax({
    cache: false,
    url: 'http://localhost:14980/api/token/GenerateToken',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(model),
    success: function (response) {
    },

    error: function (jqXhr, textStatus, errorThrown) {

        console.log(jqXhr.responseText);
        alert(textStatus + ": " + errorThrown + ": " + jqXhr.responseText + "  " + jqXhr.status);
    },
    complete: function (jqXhr) {

    },
})
32
Nkosi