كيفية تثبيت عامل تصفية الإجراء في جميع الإجراءات في ASP.NET MVC؟

StackOverflow https://stackoverflow.com/questions/1320757

سؤال

هل هناك طريقة للحصول على مرشح عمل، مثل

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void OnActionExecuting(ActionExecutingContext context) {
    ...

يتم تطبيقها تلقائيا على جميع الإجراءات في موقع ويب؟

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

المحلول

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

[MyActionFilter]
public class MyBaseController : Controller
{
  ...
}

public class HomeController : MyBaseController
{
  ...
}

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

نصائح أخرى

أعلم أن هذا سؤال قديم، ولكن بدءا من ASP.NET MVC 3 يمكنك استخدامه مرشحات عالمية.

  1. يمكنك تطبيقه على فئة وحدة تحكم كاملة لتأثيرها على جميع الإجراءات على وحدة تحكم.
  2. يمكنك تطبيقه على فئة وحدة تحكم أساسية ولديك جميع وحدات التحكم الخاصة بك يرثين من وحدة التحكم هذه، وبالتالي الحصول على تأثير تطبيق المرشح على جميع وحدات التحكم.
  3. يمكنك استخدام فئة وحدة تحكم أساسية وتجاوز طريقة actionExecuting مباشرة على وحدة التحكم التي ربما تكون أكثر ملاءمة من استخدام عامل تصفية إذا كانت نيتك هي تطبيق رمز المرشح الخاص بك على جميع الإجراءات عبر اللوحة.

حيث NewlyCreatEdactionFilter هو ActionFilter أنت تهيئ، من الواضح. :)

[NewlyCreatedActionFilter]
public class Basecontroller : Controller
{
  ...
}

public class HomeController : BaseController
{
  ...
}

public class AccountController : BaseController
{
  ...
}

سترث كل من فئات وحدة التحكم هذه من BaseController، لذلك يتم تطبيق مرشح NewlyCreatEdaceFilter على الجميع.

يمكنك فقط استخدام ActionFilters، كما هو مذكور من قبل Victor، في Global.asax

protected void Application_Start()
{
   // Register global filter
   GlobalFilters.Filters.Add(new CustomActionFilterAttribute());
}

أو في ASPNETCORE، يمكنك المحاولة

  services.AddMvc(options =>
  {
    options.Filters.Add(new CustomActionFilterAttribute());
  });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top