Asp.Net MVC学习笔记-Filter
Asp.Net MVC的四种过滤器类型:
- ActionFilter(方法过滤器):接口名为[IActionFilter],在控制器方法调用前/后执行
- ResultFilter(结果过滤器):接口名为[IResultFilter],在控制器方法调用完,跳转至view页面前/后执行
- AuthorizationFilter(授权过滤器):接口名为[IauthorizationFilter],所有过滤器中最先执行的
- ExceptionFilter(异常处理过滤器):接口名为[IExceptionFilter],在控制器方法抛出异常时执行
在项目中新建文件夹命名为Filter,创建新的类型时为了遵循约定名称以Attribute结尾。
AuthorizeAttribute
Filter文件夹下创建新类型MyAuthorizeAttribute,继承AuthorizeAttribute类:
1 2 3 4 5 6 7 8 9 10 11 12 | /// <summary> /// 用户权限验证过滤器 /// </summary> public class MyAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { filterContext.HttpContext.Response.write( "Your Authorize" ); //你自己的权限验证逻辑 filterContext.Result = new RedirectResult( "URL" ); //验证不通过则跳转到指定地址 } } |
对需要验证的类添加[Filter.MyAuthorize]标记,Authoize过滤器是用于全局过滤的,主要做登录验证和权限验证,在App_Start下面的FilterConfig类的RegisterGlobalFilters中添加:
filters.Add(new MyAuthorizeAttribute());
在全局中注册过滤器,则所有控制器的所有Action都会执行这个过滤器。
HandleErrorAttribute
Filter文件夹下创建新类型MyHandleErrorAttribut继承HandleErrorAttribute:
/// <summary> /// 用于捕获action中的未被try{}catch{}捕获的异常 /// </summary> public class MyHandleErrorAttribut : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { //1、获取异常对象 Exception ex = filterContext.Exception; string action = HttpContext.Current.Request.CurrentExecutionFilePath;//获取发生异常的acition string msg = "发生错误的Action名称:" + action + ",错误信息:" + ex.Message; //这里对异常进行处理,如保存异常日志等 //2、重定向友好页面 filterContext.Result = new RedirectResult("~/error.html"); //3、 通知MVC框架,现在这个异常已经处理掉 filterContext.ExceptionHandled = true; base.OnException(filterContext); } }
异常处理一般都是放在全局过滤器上面的,只要任意Action报错就会执行过滤器中的代码。修改App_Start下面的FilterConfig的代码:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new MyAuthorizeAttribute()); filters.Add(new LogHandleErrorAttribut()); } }
这里做个简单的记录做备忘之用。
从别后, 忆相逢, 几会魂梦与汝同。
分类:
Asp.Net MVC
标签:
aps.net mvc
, Filter
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端