パラメータを渡すとエラーが発生します。
「複数のパラメーターをバインドできません」
ここに私のコードがあります
[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) {
},
})
参照: 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) {
},
})