2
私のアプリケーションでWebサービスAPIを呼び出そうとしていますが、パラメータを渡していますが、何らかの理由でJSONを逆シリアル化していません。代わりに、JSONを文字列として渡すだけです。 APIコードは次のとおりです。Web Api 2がJSONをデシリアライズしない
[Route("api/v1/images/GetMemberImageUrl", Name = "ApiImagesGetMemberImageUrl")]
[HttpPost]
public IHttpActionResult GetMemberImageUrl([FromBody]object memberId)
{
// memberId is a string and it contains "{memberId: 18}"
// Do stuff
// ...
}
私は元々[FromBody]int memberId
でした。私は悪い要求を持っていたので、それをobject
に変更しました。正確に何が渡されたのか分かりました。何が入ってくるのかは、"{memberId: 18}"
を含む文字列です。
$.ajax({
type: 'POST',
cache: false,
timeout: 30000,
data: JSON.stringify({memberId: @Infrastructure.Member.GetAuthenticatedMembersId()}),
url: '@Url.HttpRouteUrl("ApiImagesGetMemberImageUrl", null)',
contentType: "application/json",
success: function(retval) {
// Do more stuff
}
});
モデルバインダーは、私のJSONをデシリアライズされていない理由を任意のアイデア:APIへの私のAJAX呼び出しコードはここ
のですか?
ねえ、あなたは 'YourModel'(それがあなたの引数から同じ性質を持っている)にobject''から変更したモデルを作成しようとしましたか?通常、私はこのようにします。 –
@VagnerLucas - おそらくそれを行うことはできますが、うまくいくかもしれませんが、Web Api 2のモデルバインダーは、自分のパラメータを着信JSONにバインドする方法を知る上で十分スマートであると考えられます。 – Icemanind
@VagnerLucas - それは動作します。私はちょうどそれを試みた。しかし、私はまだ新しいモデルクラスを毎回作成する必要がなく、モデルバインダーを使って私にそれを実行させるべきだと思います。 – Icemanind