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