2016-09-21 3 views
1

現在、以下のようなオブジェクトタイプを受け取っているAPIがあります。変更されたボディを受け入れるようにWeb Api 2 Postメソッドを変更します。

public HttpResponseMessage Post(Job job) {} 

予想通りJob型すべてが動作一致直線(又は部分的な)オブジェクトを受け取ります。問題は、シリアライザがこれを処理する方法を知ることを妨げている、より多くの情報を本文に含めるようにJSONオブジェクトを変更することです。 新しいリクエストは次のとおりです。

{ 
    "httpHeaders":{ 
    }, 
    "payload":{ 
    } 
} 

私たちが受け取った「古い」オブジェクトは現在「ペイロード」にあります。メソッドをオーバーライドする必要がありますか?おそらくMedia Formatter

おかげ

答えて

4

予想されるモデル構造を含む別のプロパティの名前HttpHeadersを持つプロパティの名前ペイロードとして、あなたの仕事の種類が含まれているタイプを作成します。なぜペイロード本体にHttpヘッダーを送信しているのか分かりません。

モデルバインディングは、要求本体の構造と期待されるモデルの構造を一致させようとします。この場合、Job型のジョブを含むタイプからJob型の型を受け入れることになります。したがって、次のようなスーパータイプを作成します。

public class InputModel { 
    public Job Payload {get;set;} 
    public HeaderType HttpHeaders {get;set;} 
} 

これで、ASP.NETモデルバインディングによってオブジェクトが設定されます。

+0

これは私が想定していたので、ペイロードを私のジョブモデルに手動でマッピングする必要がありますか、またはこの時点でデシリアライザを使用することができますか? – McArthey

+0

ペイロードオブジェクトがあなたのジョブモデルと一致する場合、実行する必要があるのは、ペイロードというプロパティに名前を付けて、ジョブの種類にすることだけです。ペイロードオブジェクトがジョブモデルと一致しない場合は、モデルバインド中にマッピングが発生するようにシリアル化情報を提供する必要があります。 –

+0

パーフェクト。どうもありがとう。さて、これはメッセージキューを通過しています。なぜならそれは奇妙なフォーマットなのです。これは、リモートAPI呼び出しのために変更されています。 – McArthey

関連する問題