Aspnetcore: Suporta vários [FromRoute], [FromHeader], [FromBody], etc em um único objeto

Criado em 23 jan. 2018  ·  3Comentários  ·  Fonte: dotnet/aspnetcore

Estou tentando criar um objeto com todos os dados relevantes de um limite de solicitação.

Imagine uma ação como esta

[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)

E o modelo poderia ser assim

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; }
}

Infelizmente, vários [FromBody] não são permitidos.

Se fosse permitido e funcionasse como esperado, eu poderia implementar um controlador CRUD genérico como este

[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();
}

Obviamente, não seria exatamente assim.
A ideia é remover toda lógica do controlador que não seja relacionada a API / MVC. Então, tudo o que o controlador faz é

  • validar o modelo
  • extraia os dados desejados da solicitação
  • enviar os dados relevantes para um manipulador
  • retornar uma resposta http apropriada

Agora posso ter uma implementação para todas as minhas necessidades de controlador CRUD - e houve muita alegria!

Não precisa ser [FromBody] , pode ser outro atributo. Como [FromBodyPart] , [BindFromBody] ou algo completamente diferente.

Isso seria viável?

area-mvc

Comentários muito úteis

Obrigado por sua solicitação de recurso. Vamos considerar esse recurso durante o próximo período de planejamento de lançamento e atualizar o status desse problema de acordo.

Todos 3 comentários

Obrigado por sua solicitação de recurso. Vamos considerar esse recurso durante o próximo período de planejamento de lançamento e atualizar o status desse problema de acordo.

Acho que essa seria uma solução para minha pergunta SO que ainda não respondi aqui:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

Obrigado por nos contatar.
Depois de reavaliar essa pergunta, decidimos não fornecer esse recurso, pois isso não está bem alinhado com os princípios que tentamos seguir na estrutura.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

githubgitgit picture githubgitgit  ·  3Comentários

aurokk picture aurokk  ·  3Comentários

dotNETSanta picture dotNETSanta  ·  3Comentários

BrennanConroy picture BrennanConroy  ·  3Comentários

FourLeafClover picture FourLeafClover  ·  3Comentários