سؤال

ولقد زينت تحكم قاعدة بلدي مع اثنين من المرشحات العمل. أنها تعمل بشكل جيد.

واحدة من تلك المجموعات مرشحات يصل الطلب - يفعل أشياء مثل مجموعة الثقافة على أساس المجال، الخ

وأنا أيضا لديها عدد قليل من الإجراءات التي تتطلب الإذن باستخدام السمة تخويل.

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

والمسألة هي ان المرشحات العمل أبدا تشغيل حتى يتم تعيين الثقافة وغيرها من البيانات طلب أبدا. هذا يؤدي على نحو فعال اللغة لتكون خاطئة في طريقة العرض وغيرها من البيانات ليكون في عداد المفقودين.

وأنا أعلم أن المرشحات ترخيص تشغيل البداية ولكن سؤالي هو: كيف يمكنني تصميم هذا بحيث يمكنني التأكد من أن بعض الأساليب التي تدار دائما قبل يتم إرجاع طريقة العرض، بغض النظر عن تفويض

.

وعلى أمل أن من المنطقي.

هل كانت مفيدة؟

المحلول

ووفقا لهذا الوثائق (تحت رأس بحث الترتيب)، مرشحات ترخيص تشغيل دائما قبل المرشحات العمل. وهذا يعني أن العبث مع خصائص Order لن يساعد.

وأعتقد أن أفضل طريقة للتعامل مع هذا هو لكتابة السمة التفويض الخاصة بك (من شاء subclasses ترث AuthorizeAttribute وتجاوز AuthorizeCore) وتشغيل المرشحات العمل يدويا عندما يفشل ترخيص.

نصائح أخرى

وانظر على أمر الإعدام الصادر بحق العمل الفلاتر في MSDN المادة على تصفية العمل

وفي الأساس، يمكنك توفير خاصية Order على هذه الفلاتر الثقافة بحيث يتم تشغيله <م> قبل مرشح التفويض، شيء من هذا القبيل:

[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }

[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }

...

إذا فشل ذلك، لا يزال بإمكانك على تنفيذ كود bfore هذا العمل ينفذ وقبل أي ActionFilter سوف ينفذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top