学习前端的网站,自己制作网站的软件,自己做网站花钱吗,个人网站备案 各省在项目中很多地方需要用到面向切面的思想#xff0c;比如说身份验证、日志功能这些。 过滤器可以理解为在执行某个功能时#xff0c;额外执行的一段代码#xff0c;在MVC中有Action和result过滤器#xff0c; 分别都是在执行前和执行后进行过滤的#xff0c;具体代码如下比如说身份验证、日志功能这些。 过滤器可以理解为在执行某个功能时额外执行的一段代码在MVC中有Action和result过滤器 分别都是在执行前和执行后进行过滤的具体代码如下 public class MyActionFilterAttribute:ActionFilterAttribute{public string Name { get; set; }public override void OnActionExecuting(ActionExecutingContext filterContext){base.OnActionExecuting(filterContext);HttpContext.Current.Response.Write(pAction 开始执行 Name /p);}public override void OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);HttpContext.Current.Response.Write(pAction 执行完成 Name /p);}public override void OnResultExecuting(ResultExecutingContext filterContext){base.OnResultExecuting(filterContext);HttpContext.Current.Response.Write(pResult 开始执行 Name /p);}public override void OnResultExecuted(ResultExecutedContext filterContext){base.OnResultExecuted(filterContext);HttpContext.Current.Response.Write(pResult 执行完成 Name /p);}} [MyActionFilter(NameActionFilterTest)]public ActionResult ActionFilterTest(){throw new Exception(demo);return Content(页面加载完成);} 其中注意过滤器特性的位置还可以放到controller的上面代表这个控制器下所有的Action方法都执行这个过滤器也可以放到Global.asax文件中代表整个项目都执行这个过滤器。 过滤器是有执行优先级的最靠近Action的过滤器才会执行。 那么如果想一个Action执行多个过滤器就需要再添加一个新的特性。 [AttributeUsage(AttributeTargets.All,AllowMultipletrue)]
public class HomeController : Controller 其中AllowMultipletrue属性是允许多个特性一起执行执行的时候顺序会是先global中的过滤器以此类推最后正着进去反着出来。 异常过滤器 异常过滤器当项目中出现异常时就会自动执行异常过滤器中的代码。先添加一个类。 public class MyExceptonFilterAttribute:HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){base.OnException(filterContext);HttpContext.Current.Response.Redirect(/Home/Index);}} 然后在global页面中添加异常的过滤器。 public static void RegisterGlobalFilters(GlobalFilterCollection filters){// filters.Add(new HandleErrorAttribute()); //换自己的filters.Add(new MyExceptonFilterAttribute());} 这里做的是跳转至错误页面其实应该记录日志文件思路大概是使用线程访问文件然后记录但是以后用户会非常多 所以就需要考虑到多线程操作这个文件用线程锁的方式记录但是这样会很影响性能。 所以应该考虑使用使用内存列队来提高性能 Redis日志信息直接放进内存中然后在用一个线程读取并写入日志文件这样就不会让用户等待。 在项目中一般使用log4net组件进行记录日志。 总结过滤器大概的流程为继承ActionFilterAttribute和HandleErrorAttribute类然后重写里面的方法。 最后为需要过滤的Action加上特性就可以了。 转载于:https://www.cnblogs.com/y8932809/p/4408899.html