Aspnetcore: Admite varios [FromRoute], [FromHeader], [FromBody], etc. en un solo objeto

Creado en 23 ene. 2018  ·  3Comentarios  ·  Fuente: dotnet/aspnetcore

Estoy tratando de crear un objeto con todos los datos relevantes de una solicitud enlazada.

Imagina una acción como esta

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

Y el modelo podría ser así

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

Lamentablemente, no se permiten varios [FromBody] .

Si estuviera permitido y funcionara como se esperaba, podría implementar un controlador CRUD genérico como ese

[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, no se vería exactamente así.
La idea es eliminar toda la lógica del controlador que no esté relacionada con API / MVC. Entonces todo lo que hace el controlador es

  • validar el modelo
  • extraer los datos deseados de la solicitud
  • enviar los datos relevantes a un controlador
  • devolver una respuesta http apropiada

Ahora puedo tener una implementación para todas mis necesidades de controlador CRUD, ¡y hubo mucho regocijo!

No necesita ser [FromBody] , podría ser otro atributo. Como [FromBodyPart] , [BindFromBody] o algo completamente diferente.

¿Sería eso factible?

area-mvc

Comentario más útil

Gracias por su solicitud de funciones. Consideraremos esta función durante el próximo período de planificación del lanzamiento y actualizaremos el estado de este problema en consecuencia.

Todos 3 comentarios

Gracias por su solicitud de funciones. Consideraremos esta función durante el próximo período de planificación del lanzamiento y actualizaremos el estado de este problema en consecuencia.

Creo que esta sería una solución para mi pregunta SO que todavía tengo sin respuesta aquí:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

Gracias por contactarnos.
Después de reevaluar esta pregunta, hemos decidido no proporcionar dicha característica, ya que no está bien alineada con los principios que intentamos seguir en el marco.

¿Fue útil esta página
0 / 5 - 0 calificaciones