2017-01-19 10 views
1

WebAPIでコントローラのメソッドのパラメータとして定義したモデルをどのように置くのが好きですか?私は、ODataのに切り替えていると私は、データ構造での作業で発見したすべての例では、ModelBuilderのC#でODataアクションのパラメータとしてクラスを宣言する

var action = builder.Action("MyAction").ReturnsCollection<int>(); 
action.Parameter<int>("ProgramId"); 
action.Parameter<int>("BrandId"); 
action.Parameter<int>("StoreId"); 
action.Parameter<OperationStatus>("Status"); 

をそれを定義して、コントローラに手動でODataParameter辞書からそれらの値を取得する必要がありますすることです。私はこれが面倒だと思う。 また、WebAPIの方法では、コンパイル時やVisual Studioのインテリセンスでエラーをキャッチし、アノテーションを使用して検証を行うことができます。

アクションにパラメータを渡す他の方法はありますか? WebAPIの "特典"のようなもの

答えて

0

OdataActionのパラメータとしてカスタムDTOを設定できます。 例えば、登録するためのコードは次のようになります:

var action = builder.Action("MyAction"); 
action.Parameter<OperationStatus>("Status"); 
action.ReturnsCollection<int>("Results"); 

、要求のためのJSONペイロードは次のようになります:

{ 
    "Status": { 
     "Property1":"value", 
     "Property2":"value" 
    } 
} 

コントローラ内のアクション宣言:

[HttpPost] 
[ODataRoute("MyAction")] 
public async Task<IHttpActionResult> MyAction(ODataActionParameters parameters) 
{ 
    OperationStatus status; 
    if (!parameters.TryGetValue("Status",out status)) 
    { 
     return BadRequest("Missing parameter Status"); 
    } 
} 
+0

ので、簡単な。それはまだ辞書を使用していますが、DTOを持っていれば十分です。 また、outパラメータを使用することは、オブジェクトに割り当てられてから、OperationStatusにキャストする必要があります。 – Vector

関連する問題