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 é
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?
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.
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.