Asp.net mvc Asp.net Mvc:在每个控制器/操作上调用逻辑

Asp.net mvc Asp.net Mvc:在每个控制器/操作上调用逻辑,asp.net-mvc,Asp.net Mvc,每次操作返回视图时,我都要执行一些逻辑。逻辑需要知道动作和控制器的名称。目前,我正在使用每个控制器/操作上的过滤器,但有时我希望返回视图的所有操作都使用此逻辑。因此,到处添加筛选器似乎是我可以避免的额外工作。要从筛选器中了解操作和控制器名称: String ActionName = filterContext.ActionMethod.Name; String ControllerName = filterContext.Controller.ToString(); 要将筛选器应用于所有操作,

每次操作返回视图时,我都要执行一些逻辑。逻辑需要知道动作和控制器的名称。目前,我正在使用每个控制器/操作上的过滤器,但有时我希望返回视图的所有操作都使用此逻辑。因此,到处添加筛选器似乎是我可以避免的额外工作。

要从筛选器中了解操作和控制器名称:

String ActionName = filterContext.ActionMethod.Name;
String ControllerName = filterContext.Controller.ToString();
要将筛选器应用于所有操作,请在基本控制器类上定义
OnActionExecuting
,然后将其子类化


我问了一个关于如何仅过滤返回视图的操作的具体问题…

要从过滤器中了解操作和控制器名称:

String ActionName = filterContext.ActionMethod.Name;
String ControllerName = filterContext.Controller.ToString();
要将筛选器应用于所有操作,请在基本控制器类上定义
OnActionExecuting
,然后将其子类化

我问了一个关于如何只过滤返回视图的操作的具体问题…

您可以覆盖or方法,为控制器中的所有操作提供通用行为。如果要将其应用于多个控制器,可以使用此重写创建一个基本控制器类,并使需要此行为的控制器从基本控制器派生

public override void OnActionExecuting( ActionExecutingContext filterContext )
{
     ... common code here ...
}

public override void OnActionExecuted( ActionExecutedContext filterContext )
{
    if (filterContext.Result is ViewResult)
    {
        ... common code here ...
    }
}
您可以重写或方法,为控制器中的所有操作提供通用行为。如果要将其应用于多个控制器,可以使用此重写创建一个基本控制器类,并使需要此行为的控制器从基本控制器派生

public override void OnActionExecuting( ActionExecutingContext filterContext )
{
     ... common code here ...
}

public override void OnActionExecuted( ActionExecutedContext filterContext )
{
    if (filterContext.Result is ViewResult)
    {
        ... common code here ...
    }
}

有没有办法让所有的控制器都从这个基类派生出来?当然。它们现在都来自控制器。创建新控制器时只需更改基类。但如果您有一个已经有20个控制器的项目,该怎么办。您是手动更新它们还是我可以告诉所有控制器从一个位置的新基本控制器派生?我想它们都必须手动更新。不过,您只需在基本控制器上编写功能测试。即使是基于20个类,在减少所有操作的过滤器装饰方面,也不是一个坏的权衡。确保这确实是一个您希望在任何地方都应用的操作,否则您将在基本控制器方法中编写大量“切换”代码,以考虑不同的场景。这将是您应该使用filter方法的标志。例如,我使用基本控制器方法将用户选择的主题注入到页面上。好的,这很清楚。谢谢你花时间回答我所有的问题。有没有办法让所有的控制器都从这个基类派生出来?当然。它们现在都来自控制器。创建新控制器时只需更改基类。但如果您有一个已经有20个控制器的项目,该怎么办。您是手动更新它们还是我可以告诉所有控制器从一个位置的新基本控制器派生?我想它们都必须手动更新。不过,您只需在基本控制器上编写功能测试。即使是基于20个类,在减少所有操作的过滤器装饰方面,也不是一个坏的权衡。确保这确实是一个您希望在任何地方都应用的操作,否则您将在基本控制器方法中编写大量“切换”代码,以考虑不同的场景。这将是您应该使用filter方法的标志。例如,我使用基本控制器方法将用户选择的主题注入到页面上。好的,这很清楚。感谢您抽出时间回答我的所有问题。