素材巴巴 > 程序开发 >

.net core 过滤器之Filter

程序开发 2023-09-06 23:20:29

  当我们进行项目开发时,往往在开发过程中需要临时加入一些常用功能性代码,如身份验证、日志记录、异常获取等功能。如果每个方法中都加入这些功能性代码的话,无疑使项目显得过于臃肿,代码繁杂。这时候就要加入过滤器了。.net framework及.net core中都支持非常简单的过滤器操作:Filter。它能在函数执行前或执行后切入函数。而不需要修改原来的代码,使项目更加清晰。

  下面讲解Filter在.net core MVC中的用法。

首先,新建.net core mvc web应用程序,然后加入MyFilter类,继承ActionFilterAttribute

public class MyFilter : ActionFilterAttribute{public string Message { get; set; }public override void OnActionExecuting(ActionExecutingContext filterContext){base.OnActionExecuting(filterContext);filterContext.HttpContext.Response.Write("
" + "执行OnActionExecuting:" + Message + "
");}public override void OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);filterContext.HttpContext.Response.Write("
"+ "执行OnActionExecuted:" + Message + "
");}public override void OnResultExecuting(ResultExecutingContext filterContext){base.OnResultExecuting(filterContext);filterContext.HttpContext.Response.Write("
" + "执行OnResultExecuting:" + Message + "
");}public override void OnResultExecuted(ResultExecutedContext filterContext){base.OnResultExecuted(filterContext);filterContext.HttpContext.Response.Write("
" + "执行OnResultExecuted:" + Message + "
");}}
然后在Home控制器中的Action中加入过滤器
public class HomeController : Controller{[MyFilter(Message ="首页")]public ActionResult Index(){return Content("
" + "执行Index中的内容"+ "
");}[MyFilter(Message = "关于页面")]public ActionResult About(){return Content("
" + "执行About中的内容" + "
");}}

这时候运行项目:/Home/Index,打印出如下内容:


运行/Home/About,打印出如下内容:


由此可以发现:执行循序是:OnActionExecuting>OnActionExecuted>OnResultExecuting>Action>OnResultExecuted

(Action执行之前执行OnActionExecuting,Action执行之后执行OnActionExecuted,Action返回之前执行OnResultExecuting,Action返回之后执行OnResultExecuted)


标签:

上一篇: async await:发送Ajax请求 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。