أحاول إنشاء كائن بجميع البيانات ذات الصلة من طلب ملزم.
تخيل مثل هذا العمل
[HttpPost({id})]
public virtual async Task<IActionResult> Post(PostRequest model)
ويمكن أن يكون النموذج مثل هذا
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; }
}
لسوء الحظ ، لا يُسمح باستخدام [FromBody]
.
إذا تم السماح بذلك وعملت كما هو متوقع ، يمكنني تنفيذ وحدة تحكم CRUD عامة مثل ذلك
[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();
}
من الواضح أنها لن تبدو هكذا بالضبط.
الفكرة هي إزالة كل المنطق من وحدة التحكم التي لا تتعلق بـ API / MVC. لذلك كل ما تفعله وحدة التحكم هو
الآن يمكنني الحصول على تطبيق واحد لجميع احتياجات وحدة تحكم CRUD - وكان هناك الكثير من البهجة!
لا يلزم أن تكون [FromBody]
فقد تكون سمة أخرى. مثل [FromBodyPart]
أو [BindFromBody]
أو شيء مختلف تمامًا.
هل هذا ممكن؟
شكرا لك على طلب الميزة الخاص بك. سننظر في هذه الميزة أثناء فترة التخطيط للإصدار التالي ونقوم بتحديث حالة هذه المشكلة وفقًا لذلك.
أعتقد أن هذا سيكون حلاً لسؤالي SO الذي ما زلت لم أجد عليه هنا:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property
شكرا لإتصالك بنا.
بعد إعادة تقييم هذا السؤال ، قررنا عدم تقديم مثل هذه الميزة لأن هذا لا يتماشى جيدًا مع المبادئ التي نحاول اتباعها في إطار العمل.
التعليق الأكثر فائدة
شكرا لك على طلب الميزة الخاص بك. سننظر في هذه الميزة أثناء فترة التخطيط للإصدار التالي ونقوم بتحديث حالة هذه المشكلة وفقًا لذلك.