リクエストバインドからのすべての関連データを使用してオブジェクトを作成しようとしています。
このようなアクションを想像してみてください
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
そして、モデルはこのようになる可能性があります
public class PostRequest
{
[FromRoute]
public int Id { get; set; }
[FromHeader]
public string SomeHeader { get; set; }
[FromBody]
public int Foo { get; set; }
[FromBody]
public string Bar { get; set; }
[FromBody]
public string Baz { get; set; }
}
残念ながら、複数の[FromBody]
は許可されていません。
それが許可され、期待どおりに機能した場合、私はそのような汎用CRUDコントローラーを実装できます
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
{
var command = _mapper.Map<TCommand>(model); // AutoMapper
await _mediator.Send(command); // MediatR
// omitted for brevity
return Created();
}
明らかに、それは正確にはそのようには見えないでしょう。
アイデアは、API / MVCに関連しないすべてのロジックをコントローラーから削除することです。 つまり、コントローラーが行うのは
これで、CRUDコントローラーのすべてのニーズに対応する1つの実装を作成できます。そして、多くの喜びがありました。
[FromBody]
である必要はなく、別の属性である可能性があります。 [FromBodyPart]
、 [BindFromBody]
またはまったく異なるもののように。
それは実現可能でしょうか?
機能のリクエストをありがとうございます。 次のリリース計画期間中にこの機能を検討し、それに応じてこの問題のステータスを更新します。
これは、私がまだここで答えていない私のSOの質問に対する解決策になると思います。
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property
お問い合わせいただきありがとうございます。
この質問を再評価した後、フレームワークで従おうとしている原則と十分に一致していないため、このような機能を提供しないことにしました。
最も参考になるコメント
機能のリクエストをありがとうございます。 次のリリース計画期間中にこの機能を検討し、それに応じてこの問題のステータスを更新します。