現在、投稿リクエストからデータを受け入れることができるコントローラーを MVC 6 で作成しようとしています。問題は、クライアント (常に Web ブラウザーであるとは限りません) によっては、データが要求 URL のキーと値のペアとして、または要求本文の JSON として受信される可能性があることです。
現在、このメソッドは URL からデータを受け取るために機能します。
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo capture) {
...
}
多くの試行錯誤 (およびスタック オーバーフローの回答) の後、[FromBody]
MVC 6 が WebApi と標準 MVC を結合するため、属性がモデル バインダーに要求本文を調べるように指示することがわかりました。次のコードは、フォーム本体の JSON からデータを解析します。
[HttpPost]
public async Task<CaptureResponse> CaptureData([FromBody] CaptureInfo capture) {
...
}
簡単にするために、この 2 つをどうにかして結合したいと思います。そのため、モデル バインダーは同じパラメーター変数でデータを提供します。これまでのところ、同じアクションにデータを取得する唯一の方法は、URL 用と本文用の 2 つのパラメーターを指定し、次のようにそれぞれに対して null チェックを行うことです。
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo capture, [FromBody] CaptureInfo bodyCapture) {
if (bodyCapture != null) {
if (bodyCapture.RequiredProperty1!= null
&& bodyCapture.RequiredProperty2!= null) {
capture = bodyCapture;
}
}
...
}
次のように入力属性の前に複数のプロパティを指定しようとしました:
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo [FromQuery][FromRoute][FromForm][FromBody] capture) {
...
}
しかし、うまくいきません。このようなことが可能である場合、何かアイデアはありますか?