.NET中的拦截器filter的使用
拦截器的使用
使用场景分析
我们先想像一个场景,就是程序员开发软件,他是怎么工作的呢?我们都知道,普通的程序员只需要根据需求文档开发相应的功能即可,他不用和客户谈论软件需求,不用理会软件卖多少钱,他要做的事很单一:开发软件!
当一个公司找软件开发商做项目的时候,有专门的人员会跟客户谈需求,谈完需求,做好设计,写好文档,再把相关的文档送到程序员手上,程序员只需要根据文档开发相应的功能,当程序开发完成之后,会有相应的测试组测试软件各各方面的东西,然后测试通过再交到客户手上!
这个场景就是一个典型的拦截器,也叫AOP(面向切面编程),程序员可以看成是一个业务组件,他有个方法就是“开发”,至于与客户的交互,以及软件开发后的后期工作,就不是程序员应该关心的事了,于是我们可以把测试组看成是一个拦截器,当测试组发现问题时拦截软件流向客户,返还给程序员要求修改。
对于这个场景,我们可以看看有什么好处。首先程序员的职责单一了,不必理会和他无关的事,可以专注他的工作:开发。而且拦截器可以得到复用,例如一个软件开发商可以只请一个测试员测试5个程序员写出来的程序,这样拦截器的代码就可以减少重复了!
OK,回到我们的主题,在ASP.NET MVC中,有三种拦截器:Action拦截器、Result拦截器和Exception拦截器,所谓的拦截器也没有什么的,只是写一个类,继承另一个类和一个接口,顺便实现接口里面的方法而以拉!下面我们一一实现!
public class ExceptionFillters : FilterAttribute,IExceptionFilter { //发生异常时会执行这段代码 public void OnException(ExceptionContext filterContext) { //在这里你可以记录发生异常时你要干什么,比例写日志 //这一行告诉系统,这个异常已经处理了,不用再处理 filterContext.ExceptionHandled = true; } } public class ActionFillters : FilterAttribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { //执行action后执行这个方法 比如做操作日志 } public void OnActionExecuting(ActionExecutingContext filterContext) { //执行action前执行这个方法,比如做身份验证 } } public class ResultFillters : FilterAttribute, IResultFilter { public void OnResultExecuted(ResultExecutedContext filterContext) { //执行完action后跳转后执行 } public void OnResultExecuting(ResultExecutingContext filterContext) { //执行完action后跳转前执行 } }
使用的时候更是方便,利用C#里面的特性,真是方便极了,请看代码!(PS:action和controller都一樣!)
[ResultFillters] [ActionFillters] [ExceptionFillters] public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现