C# Webapi Filter 过滤器 - 生命周期钩子函数 - Exception Filter 基础
什么是Filter ?
1. 切面编程机制,在 ASP.NET Core 特定的位置执行我们自定义的代码;
2. ASP.NET Core 中的Filter五种类型,Authorization ,filter ,resource filter ,action filter ,exception fitler ,result filter ;
3. 所有的筛选器都有异步和同步两种版本 ;eg:IActionFilter,IAsyncActionFilter ;
Action filte讲解:
比如在controller 方法中出现未处理异常 ;文件
("f:/1.txt"); 不存在 ;
using Microsoft.AspNetCore.Mvc; namespace Filter.Controllers { [ApiController] [Route("ap/[controller]/[action]")] public class WeatherForecastController : ControllerBase { [HttpGet(Name = "GetWeatherForecast")] public string Test1() { // 文件并不存在会抛出错误 string s = System.IO.File.ReadAllText("f:/1.txt"); // 读取文件 return s; } }; }
对于这种处理可以使用 action filter 劫持并对其做出相应的处理 ;开发环境和生产环境 ;
开发环境要抛出详细的信息,方便我们调试,但是在生产环境,我们只需要抛出 500 服务器出现位置错误即可 ;
1. 注册Filter
// 注册过滤器 builder.Services.Configure<MvcOptions>(opt => { opt.Filters.Add<MyExceptionFilter>(); });
2. 具体服务
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; namespace Filter { public class MyExceptionFilter : IAsyncExceptionFilter { public readonly IWebHostEnvironment hostEnv; public MyExceptionFilter(IWebHostEnvironment hostEnv) { this.hostEnv = hostEnv; } /// 处理异常 public Task OnExceptionAsync(ExceptionContext context) { // context.Exception 代表异常信息对象 // context.ExceptionHandled 赋值为 true ,下面所有的 filter 就不会在执行 ; // context.result 会被输出给客户端 string msg; if (hostEnv.IsDevelopment()) { // 开发环境 msg = context.Exception.ToString(); } else { // 生产环境 msg = "服务器发生未处理异常"; } ObjectResult objResult = new ObjectResult(new { code = 500, message = msg }); context.Result = objResult; context.ExceptionHandled = true; return Task.CompletedTask; } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
2022-10-28 自定义指令 v-imgerror 当图片的 src 资源 无效 就替换 默认的 src 显示图片
2022-10-28 permission 文件 - 后台管理 element-admin 模板 作用-前置路由守卫
2022-10-28 前端 vue.config.js 处理跨域问题 proxy 代理
2022-10-28 手动检查 token 是否过期
2022-10-28 Access to XMLHttpRequest at xxxx from origin xxx has been blocked by CORS policy: No 'Access-Control- Allow-Origin' header is present on the requested resource