2016-08-28 8 views
0

私は簡単にマップされていない12345に変更を適用するために適用される一般的なアクションのサブコレクションを利用 本体のJSONプロパティからASP.NETコアアクションを選択するにはどうすればよいですか?

POST /アイテム/ 12345 /アクションのように、私はRESTインターフェースのエンドポイントを持っていますコンテンツまたはそれを直接的に他のサブコレクションに分類します。

私の質問は次のとおりです。複数の異なるアクションタイプがある可能性があるため、アップロードされたドキュメントのコンテンツのJSONプロパティによってアクションが識別されます。

リクエストのJSON本体の一部でアクションを選択する方法を教えてください。以下のような可能性に何かが...あり

[Route("api/v1/items") 
public class ItemsController : Controller 
{ 
    [HttpPost("{id}/actions")] 
    [CheckJsonBody("type", "ActionA")] 
    public ActionResult DoActionA(int id, ActionA a) 
    { 
     // do something 
    } 

    [HttpPost("{id}/actions")] 
    [CheckJsonBody("type", "ActionB")] 
    public ActionResult DoActionB(int id, ActionB b) 
    { 
     // do something 
    } 
} 

ようになり、要求...私はMicrosoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttributeGitHub)までのコードの中に自分自身を掘っている

{ 
    "type": "ActionA", 
    "abc": "xyz" 
} 

しかし、そこから始めて、高性能ソリューションに到達するには少し失われています。私はボディをデコードする必要がありますか、または制約が評価されたその時点ですでに行われていることですか?

ps:はい、私は1つのアクションでそれらを処理し、 "タイプ"プロパティを切り替えることができます。

答えて

0

ASP.NETのチームメンバーはとてもフレンドリーで答えに答えました。ActionMethodSelectorAttributeでは、ボディをメモリストリームに読み込み、選択フィルタのプロパティまで読み込みます。次に、メモリー・ストリームをゼロにして、要求で置き換えます(後のモデル・バインディングのために)。複数のアクションに対して同じプロパティを使用する場合は、基準値をHttpContext.Itemsにキャッシュして高速化することができます。

+0

あなたの結論に関するコードや例はありますか? – CSharper

+0

いいえ、実装したことはありません。 – Thomas

関連する問題