Aspnetcore: دعم متعددة [FromRoute] ، [FromHeader] ، [FromBody] ، إلخ في كائن واحد

تم إنشاؤها على ٢٣ يناير ٢٠١٨  ·  3تعليقات  ·  مصدر: dotnet/aspnetcore

أحاول إنشاء كائن بجميع البيانات ذات الصلة من طلب ملزم.

تخيل مثل هذا العمل

[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. لذلك كل ما تفعله وحدة التحكم هو

  • التحقق من صحة النموذج
  • استخراج البيانات المطلوبة من الطلب
  • إرسال البيانات ذات الصلة إلى معالج
  • إرجاع استجابة http مناسبة

الآن يمكنني الحصول على تطبيق واحد لجميع احتياجات وحدة تحكم CRUD - وكان هناك الكثير من البهجة!

لا يلزم أن تكون [FromBody] فقد تكون سمة أخرى. مثل [FromBodyPart] أو [BindFromBody] أو شيء مختلف تمامًا.

هل هذا ممكن؟

area-mvc

التعليق الأكثر فائدة

شكرا لك على طلب الميزة الخاص بك. سننظر في هذه الميزة أثناء فترة التخطيط للإصدار التالي ونقوم بتحديث حالة هذه المشكلة وفقًا لذلك.

ال 3 كومينتر

شكرا لك على طلب الميزة الخاص بك. سننظر في هذه الميزة أثناء فترة التخطيط للإصدار التالي ونقوم بتحديث حالة هذه المشكلة وفقًا لذلك.

أعتقد أن هذا سيكون حلاً لسؤالي SO الذي ما زلت لم أجد عليه هنا:
https://stackoverflow.com/questions/44261111/how-to-model-bind-path-segment-to-object-property

شكرا لإتصالك بنا.
بعد إعادة تقييم هذا السؤال ، قررنا عدم تقديم مثل هذه الميزة لأن هذا لا يتماشى جيدًا مع المبادئ التي نحاول اتباعها في إطار العمل.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات