ActionFilter的使用场景及示例
ActionFilter里面有几个可以重写的事件:OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted 从字面我们大概就知道他们运行的顺序了。
示例:看四个方法的执行次序。定义一个继承ActionFilterAttribute并重写其内部方法的类。
public class SimpleFilterAttribute:ActionFilterAttribute { public int ID { get ; set ; } public override void OnActionExecuting(ActionExecutingContext filterContext) { File.AppendAllText( @"F:/actionlog.txt" , this .ID + " " + "OnActionExecuting <br>" ); } public override void OnActionExecuted(ActionExecutedContext filterContext) { File.AppendAllText( @"F:/actionlog.txt" , this .ID + " " + "OnActionExecuted <br>" ); } public override void OnResultExecuting(ResultExecutingContext filterContext) { File.AppendAllText( @"F:/actionlog.txt" , this .ID + " " + "OnResultExecuting <br>" ); } public override void OnResultExecuted(ResultExecutedContext filterContext) { File.AppendAllText( @"F:/actionlog.txt" , this .ID + " " + "OnResultExecuted <br>" ); } } |
在HomeController的Action方法上面标志。
[SimpleFilterAttribute(ID=1,Order=1)]
public ActionResult Index()
执行后,查看actionlog.txt文件可以看到是按照:OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted 次序执行的。
1.OnActionExecuting
在Action方法调用前使用,使用场景:如何验证登录等。
public class LoginFilterAttribute:ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //当用户没有验证时 if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new RedirectToRouteResult( "Default" , new RouteValueDictionary( new {action= "Login" }) ); } } } |
[LoginFilterAttribute]
public ActionResult Index()
2.OnActionExecuted
在Action方法调用后,result方法调用前执行,使用场景:异常处理
public class ErrorActionFilter:ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.Exception != null ) { filterContext.Canceled = true ; filterContext.Result = new RedirectToRouteResult( "Demo" , new RouteValueDictionary( new { action = "ErrorPage" })); } } } |
[ErrorActionFilter]
public void ErrorHandler()
{
throw new Exception();
}
3.OnResultExecuting
在result执行前发生(在view 呈现前),使用场景:设置客户端缓存,服务器端压缩.
明天写一下。
4.OnResultExecuted
在result执行后发生,使用场景:异常处理,页面尾部输出调试信息。
明天写一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述