过滤器

.net core 过滤器之Filter

梁身定做 2018-06-18 21:48:34 11028 收藏 5
分类专栏: .net core跨平台技术 文章标签: .net core aop 过滤器
版权
  当我们进行项目开发时,往往在开发过程中需要临时加入一些常用功能性代码,如身份验证、日志记录、异常获取等功能。如果每个方法中都加入这些功能性代码的话,无疑使项目显得过于臃肿,代码繁杂。这时候就要加入过滤器了。.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("<br />" + "执行OnActionExecuting:" + Message + "<br />");
}

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.HttpContext.Response.Write("<br />"+ "执行OnActionExecuted:" + Message + "<br />");
}

public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
filterContext.HttpContext.Response.Write("<br />" + "执行OnResultExecuting:" + Message + "<br />");
}

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Write("<br />" + "执行OnResultExecuted:" + Message + "<br />");
}
}
然后在Home控制器中的Action中加入过滤器
public class HomeController : Controller
{
[MyFilter(Message ="首页")]
public ActionResult Index()
{
return Content("<br />" + "执行Index中的内容"+ "<br />");
}

[MyFilter(Message = "关于页面")]
public ActionResult About()
{
return Content("<br />" + "执行About中的内容" + "<br />");
}
}
这时候运行项目:/Home/Index,打印出如下内容:
————————————————

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

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

原文链接:https://blog.csdn.net/u010924260/article/details/80517259

原文地址:https://www.cnblogs.com/wugh8726254/p/14999274.html