2016-10-30 10 views
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呼び出しコードはここ

のですか?

+0

ねえ、あなたは 'YourModel'(それがあなたの引数から同じ性質を持っている)にobject''から変更したモデルを作成しようとしましたか?通常、私はこのようにします。 –

+0

@VagnerLucas - おそらくそれを行うことはできますが、うまくいくかもしれませんが、Web Api 2のモデルバインダーは、自分のパラメータを着信JSONにバインドする方法を知る上で十分スマートであると考えられます。 – Icemanind

+0

@VagnerLucas - それは動作します。私はちょうどそれを試みた。しかし、私はまだ新しいモデルクラスを毎回作成する必要がなく、モデルバインダーを使って私にそれを実行させるべきだと思います。 – Icemanind

答えて

0

public class MyModel 
{ 
    public string MemberId { get; set; } 
} 

またはJSONオブジェクト{memberId: 18}を定義することなく、簡単な値として、あなたのデータをポストのようなあなたのモデルを定義してください。単純に

"18" 

プロパティが別の名前を持つ場合でも、プロパティmemberIdにマップされます。

もっとreading

関連する問題