Saya mencoba membuat objek dengan semua data yang relevan dari permintaan yang terikat.
Bayangkan tindakan seperti ini
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
Dan modelnya bisa seperti ini
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; }
}
Sayangnya beberapa [FromBody]
tidak diperbolehkan.
Jika diizinkan dan berfungsi seperti yang diharapkan, saya dapat mengimplementasikan pengontrol CRUD generik seperti itu
[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();
}
Jelas itu tidak akan terlihat persis seperti itu.
Idenya adalah untuk menghapus semua logika dari pengontrol yang tidak terkait dengan API/MVC. Jadi yang dilakukan pengontrol hanyalah
Sekarang saya dapat memiliki satu implementasi untuk semua kebutuhan pengontrol CRUD saya - dan ada banyak kegembiraan!
Tidak perlu [FromBody]
itu bisa menjadi atribut lain. Seperti [FromBodyPart]
, [BindFromBody]
atau sesuatu yang sama sekali berbeda.
Apakah itu mungkin?
Terima kasih atas permintaan fitur Anda. Kami akan mempertimbangkan fitur ini selama periode perencanaan rilis berikutnya dan memperbarui status masalah ini sebagaimana mestinya.
Saya pikir ini akan menjadi solusi untuk pertanyaan SO saya yang masih belum saya jawab di sini:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property
Terima kasih telah menghubungi kami.
Setelah mengevaluasi ulang permintaan ini, kami memutuskan untuk tidak menyediakan fitur seperti itu karena ini tidak selaras dengan prinsip yang kami coba ikuti dalam kerangka kerja.
Komentar yang paling membantu
Terima kasih atas permintaan fitur Anda. Kami akan mempertimbangkan fitur ini selama periode perencanaan rilis berikutnya dan memperbarui status masalah ini sebagaimana mestinya.