猿教程 Logo

Asp.Net MVC中的Action过滤器

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

猿教程(www.yuanjiaocheng.net)上一节中,您了解了MVC中的过滤器。 在本节中,您将了解在ASP.NET MVC中称为“Action过滤器”的另一种过滤器类型。

Action过滤器在执行Action方法之前和之后执行。 Action过滤器属性可应用于单个Action方法或控制器。 当Action过滤器应用于控制器时,它将应用于该控制器中的所有Action方法。

OutputCache是一个内置的Action过滤器属性,可以应用于要缓存输出的Action方法。 例如,以下Action方法的输出将被缓存100秒。 

相关实例:

[OutputCache(Duration=100)]
public ActionResult Index()
{
    return View();
}

您可以为应用程序创建自定义Action过滤器。 让我们看看如何创建自定义Action过滤器。


自定义操作过滤器:

您可以通过两种方式创建自定义Action过滤器。 首先,通过实现IActionFilter接口和FilterAttribute类。 二,通过派生ActionFilterAttribute抽象类。

IActionFilter接口包括以下方法实现:

  • void OnActionExecuted(ActionExecutedContext filterContext)

  • void OnActionExecuting(ActionExecutingContext filterContext)

ActionFilterAttribute抽象类包括要覆盖的以下方法:

  • void OnActionExecuted(ActionExecutedContext filterContext)

  • void OnActionExecuting(ActionExecutingContext filterContext)

  • void OnResultExecuted(ResultExecutedContext filterContext)

  • void OnResultExecuting(ResultExecutingContext filterContext)

你可以看到ActionFilterAttribute类有四个方法来重载。 它包括OnResultExecuted和OnResultExecuting方法,可用于在执行结果之前或之后执行自定义逻辑。 Action过滤器通常用于应用横切关注点,例如日志记录,缓存,授权等。

参考以下用于日志记录的自定义Log过滤器类。

相关实例:

public class LogAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Log("OnActionExecuted", filterContext.RouteData); 
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Log("OnActionExecuting", filterContext.RouteData);      
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        Log("OnResultExecuted", filterContext.RouteData);      
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        Log("OnResultExecuting ", filterContext.RouteData);      
    }

    private void Log(string methodName, RouteData routeData)
    {
        var controllerName = routeData.Values["controller"];
        var actionName = routeData.Values["action"];
        var message = String.Format("{0}- controller:{1} action:{2}", methodName, 
                                                                    controllerName, 
                                                                    actionName);
        Debug.WriteLine(message);
    }
}

正如你所看到的,Log类派生出ActionFilterAttribute类。 它记录Action方法或结果执行之前和之后。 您可以将Log属性应用于要记录Action的任何控制器或Action方法。 例如,通过将Log属性应用于Controller,它将记录该控制器的每个Action方法。

相关实例:

[Log]
public class StudentController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        return View();
    }

    public ActionResult Contact()
    {
        return View();
    }
}

上面的示例将在Visual Studio的输出窗口的http:// localhost / student请求中显示以下输出。

运行结果:

OnActionExecuting- controller:Home action:Index 
OnActionExecuted- controller:Home action:Index 
OnResultExecuting - controller:Home action:Index
OnResultExecuted- controller:Home action:Index
要点
  1. Action过滤器允许将前处理和后处理逻辑应用于Action方法。 

  2. Action过滤器通常用于应用横切关注点,如日志记录,缓存,授权等。

  3. Action过滤器可以在全局,控制器或Action方法级别注册为其他过滤器。 

  4. 自定义Action过滤器属性可以通过派生ActionFilterAttribute类或实现IActionFilter接口和FilterAttribute抽象类来创建。 

  5. 每个Action过滤器必须重写OnActionExecuted,OnActionExecuting,OnResultExecuted,OnResultExecuting方法。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/mvc/action-filters-in-mvc.html