Aspnetcore: 1つのオブジェクトで複数の[FromRoute]、[FromHeader]、[FromBody]などをサポートします

作成日 2018年01月23日  ·  3コメント  ·  ソース: dotnet/aspnetcore

リクエストバインドからのすべての関連データを使用してオブジェクトを作成しようとしています。

このようなアクションを想像してみてください

[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に関連しないすべてのロジックをコントローラーから削除することです。 つまり、コントローラーが行うのは

  • モデルを検証する
  • リクエストから必要なデータを抽出します
  • の関連データをハンドラーに送信します
  • 適切なhttp応答を返す

これで、CRUDコントローラーのすべてのニーズに対応する1つの実装を作成できます。そして、多くの喜びがありました。

[FromBody]である必要はなく、別の属性である可能性があります。 [FromBodyPart][BindFromBody]またはまったく異なるもののように。

それは実現可能でしょうか?

area-mvc

最も参考になるコメント

機能のリクエストをありがとうございます。 次のリリース計画期間中にこの機能を検討し、それに応じてこの問題のステータスを更新します。

全てのコメント3件

機能のリクエストをありがとうございます。 次のリリース計画期間中にこの機能を検討し、それに応じてこの問題のステータスを更新します。

これは、私がまだここで答えていない私のSOの質問に対する解決策になると思います。
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

お問い合わせいただきありがとうございます。
この質問を再評価した後、フレームワークで従おうとしている原則と十分に一致していないため、このような機能を提供しないことにしました。

このページは役に立ちましたか?
0 / 5 - 0 評価