Aspnetcore: Unterstützt mehrere [FromRoute], [FromHeader], [FromBody] usw. in einem einzigen Objekt

Erstellt am 23. Jan. 2018  ·  3Kommentare  ·  Quelle: dotnet/aspnetcore

Ich versuche, ein Objekt mit allen relevanten Daten aus einer gebundenen Anfrage zu erstellen.

Stell dir eine Aktion wie diese vor

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

Und so könnte das Modell sein

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

Leider sind mehrere [FromBody] nicht erlaubt.

Wenn es erlaubt wäre und wie erwartet funktioniert, könnte ich einen generischen CRUD-Controller wie diesen implementieren

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

Ganz so würde es natürlich nicht aussehen.
Die Idee besteht darin, die gesamte Logik aus dem Controller zu entfernen, die nicht mit API/MVC in Zusammenhang steht. Der Controller macht also nur

  • validiere das Modell
  • die gewünschten Daten aus der Anfrage extrahieren
  • Senden Sie die relevanten Daten an einen Handler
  • eine entsprechende http-Antwort zurückgeben

Jetzt kann ich eine Implementierung für alle meine CRUD-Controller-Anforderungen haben - und die Freude war groß!

Es muss nicht [FromBody] es könnte ein anderes Attribut sein. Wie [FromBodyPart] , [BindFromBody] oder etwas ganz anderes.

Wäre das machbar?

area-mvc

Hilfreichster Kommentar

Vielen Dank für Ihre Funktionsanfrage. Wir werden diese Funktion im nächsten Planungszeitraum für Releases berücksichtigen und den Status dieses Problems entsprechend aktualisieren.

Alle 3 Kommentare

Vielen Dank für Ihre Funktionsanfrage. Wir werden diese Funktion im nächsten Planungszeitraum für Releases berücksichtigen und den Status dieses Problems entsprechend aktualisieren.

Ich denke, das wäre eine Lösung für meine SO-Frage, die ich hier noch unbeantwortet habe:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

Danke, dass sie uns kontaktiert haben.
Nachdem wir diese Anfrage erneut bewertet haben, haben wir uns entschieden, ein solches Feature nicht bereitzustellen, da es nicht gut mit den Prinzipien übereinstimmt, die wir im Framework zu befolgen versuchen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen