Wpis z mikrobloga

Mam pytanie z zakresu Asp Net Wep Api. Planuję zrobić taki case: do akcji kontrolera przychodzi model, ten model chciałbym uzupełnić po stronie backendowej. Jak to najlepiej zrobić jakiś mechanizmem? Myślałem o ModelBinder, ale model przychodzi z Body a własna implementacja ModelBindera ignoruje taki typ. Nie mogę zmienić miejsca pozyskiwanie modelu z body na np route więc to komplikuje sytuację. Macie może jakieś wskazówki bądź rozwiązanie tego problemu?
#dotnet #csharp
  • 8
@WielkiElektronig: Tak obecnie mam, ale w sumie będę miał 4 takie akcje gdzie będzie napełniany model po stronie backendowej (tymi samymi danymi) i chciałem to zrobić bardziej wszechstronnie, zamiast uzuepłanić to w każdej z 4 akcji kontrolera :)
@grzech_u: nie wiem czy dobrze zrozumiałem Twój problem, ale jak masz atrybut [ApiController] na klasie to argument, który zostanie przekazany w metodzie obsługującej POST będzie automagicznie zmapowany przez asp.net core. Przykład:

[Route("api/simple")]
[ApiController]
public class SimpleController : ControllerBase
{
[HttpPost]
public IActionResult Post(OrderRequest request)
{
return Ok();
}
}
@grzech_u: no to robisz sobie jakiś ModeloUzupelniaczService, wstrzykujesz go i uzupelniasz.
Możesz też w samym modelu niejawnie zaszyć uzupełnianie w konstruktorze i wtedy wszystko się zrobi pod maską, albo wrzucić mu metodę statyczną UzupelnijMnie() i wtedy po otrzymaniu requesta i walidacjach wywołujesz request.UzupelnijMnie(). Ogranicza Cię tylko wyobraźnia. :)
Ale jakie to mają być dane? Może trzeba zrobić do tego jakiś serwis który je tam doda albo wpiąć customowy middleware który doda to co ma być dodane
@grzech_u: Tak:

MyPost(Model model)
{
Validate(model);
service.Save(model);
}

albo tak
MyPost(Model model)
{
var model2 = new Model2()
{
//uzupelnij
}
service.Save(model2 );
}

nie kumam problemu