Aspnetcore: Prend en charge plusieurs [FromRoute], [FromHeader], [FromBody], etc. dans un seul objet

Créé le 23 janv. 2018  ·  3Commentaires  ·  Source: dotnet/aspnetcore

J'essaie de créer un objet avec toutes les données pertinentes d'une requête liée.

Imaginez une action comme celle-ci

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

Et le modèle pourrait être comme ça

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

Malheureusement, plusieurs [FromBody] ne sont pas autorisés.

Si cela était autorisé et fonctionnait comme prévu, je pourrais implémenter un contrôleur CRUD générique comme celui-ci

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

De toute évidence, cela ne ressemblerait pas exactement à cela.
L'idée est de supprimer toute logique du contrôleur qui n'est pas liée à l'API/MVC. Donc tout ce que fait le contrôleur est

  • valider le modèle
  • extraire les données recherchées de la requête
  • envoyer les données pertinentes à un gestionnaire
  • renvoyer une réponse http appropriée

Maintenant, je peux avoir une implémentation pour tous mes besoins en contrôleur CRUD - et je me réjouis beaucoup !

Il n'a pas besoin d'être [FromBody] cela pourrait être un autre attribut. Comme [FromBodyPart] , [BindFromBody] ou quelque chose de complètement différent.

Serait-ce faisable ?

area-mvc

Commentaire le plus utile

Merci pour votre demande de fonctionnalité. Nous examinerons cette fonctionnalité au cours de la prochaine période de planification de la version et mettrons à jour l'état de ce problème en conséquence.

Tous les 3 commentaires

Merci pour votre demande de fonctionnalité. Nous examinerons cette fonctionnalité au cours de la prochaine période de planification de la version et mettrons à jour l'état de ce problème en conséquence.

Je pense que ce serait une solution à ma question SO que j'ai toujours sans réponse ici:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

Merci de nous avoir contacté.
Après avoir réévalué cette demande, nous avons décidé de ne pas fournir une telle fonctionnalité car elle n'est pas bien alignée avec les principes que nous essayons de suivre dans le cadre.

Cette page vous a été utile?
0 / 5 - 0 notes