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;
}
}
}
C# Webapi Filter 过滤器 - 生命周期钩子函数 - Exception Filter 基础的更多相关文章
- vue-cli脚手架 ,过滤器,生命周期钩子函数
一.安装vue-cli脚手架 1.淘宝镜像下载 用淘宝的国内服务器来向国外的服务器请求,我们向淘宝请求,而不是由我们直接向国外的服务器请求,会大大提升请求速度,使用时,将所有的npm命令换成cnpm即 ...
- day68:Vue:类值操作/style样式操作&v-for&filer/computed/watch&生命周期钩子函数&axios
目录 1.类值操作 :class 2.style操作样式 :style 3:示例:选项卡 @click+:class 4.v-for示例:循环商品显示 5.过滤器:filter 6.计算属性:comp ...
- Vue生命周期 钩子函数和组件传值
Vue生命周期 钩子函数 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. 同时在这个过程中也会运行一 ...
- vue之生命周期钩子函数之运用
一.什么是生命周期钩子函数: 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行 ...
- 关于 vue 生命周期 钩子函数 事件
vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染->更新->渲染.卸载等一系列过程,我们称这是vue的生命周期. 通俗的将就是vue实例从创建到销毁 ...
- react中自定义函数、生命周期钩子函数、修改状态、组件、组件传值
1.回顾 2.自定义函数 事件的首字母大小 onclick ==> onClick onchange ==> onChange 普通的点击事件 ---- 调用事件不加(),加了立即执行 i ...
- 对vue生命周期/钩子函数的理解
对于实现页面逻辑交互等效果,我们必须知晓vue的生命周期,才能愉快的玩耍,知道我们写的东西应该挂载到哪里,vue官方给出的api讲解的那叫一个简单啊,如下: 所有的生命周期钩子自动绑定this上下文到 ...
- vue生命周期 钩子函数
首先,1.x和2.x的生命周期钩子对比: 钩子函数的树状图,红色的是我们可以利用的函数,绿色的是函数解析,蓝色的是函数执行时机 <!DOCTYPE html> <html> & ...
- Vue 2.0 生命周期-钩子函数理解
Vue 2.0 + 生命周期钩子在项目过程中经常用到,所以闲下来整理了下,直接复制下面的实例运行: <!DOCTYPE html> <html lang="en" ...
- 了解angularjs中的生命周期钩子函数$onInit,$onChange,$onDestory,$postLink
壹 ❀ 引 我在前面花了三篇文章用于介绍angularjs的指令directive,组件component,并专门花了一篇文章介绍directive与component的不同,其中提到在compon ...
随机推荐
- 【H5】08 图片
摘自: https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Multimedia_and_embedding 在这份教程中,到目前为止我们已经看到了 ...
- ubuntu系统升级软件sudo apt upgrade后GPU崩溃报错,显示驱动版本不匹配——ubuntu系统版本过低导致的问题
ubuntu系统升级软件(sudo apt upgrade)后,GPU崩溃报错,查看系统日志: Aug 2 06:25:02 lcwt rsyslogd: [origin software=" ...
- vue3:setup语法糖使用教程
setup语法糖简介 直接在script标签中添加setup属性就可以直接使用setup语法糖了. 使用setup语法糖后,不用写setup函数:组件只需要引入不需要注册:属性和方法也不需要再返回,可 ...
- JS Map对象与map方法
前言 最近遇到一个遍历的问题,查资料的过程中,发现有个 Map 对象,提供了很多方法可以轻松地获取我们想要的数据,之前只知道有 map ,没想到还有 Map ,是不是有点绕?不急,这两个东西都是虽然 ...
- abc366
E 解题思路 这题求的是满足\(\sum^n_{i=1}(|x-x_i|+|y-y_i|)\leq D\) 的坐标\((x,y)\) 的数目,由于是求和,所以\(x,y\) 之间是相互独立的 第一步, ...
- WPF如何给window加阴影效果
<Style x:Key="WindowStyle1" TargetType="{x:Type Window}"> <Setter Prope ...
- quartz监控日志(一)
最近几个月,现网总是出现定时器不执行的情况,或者定时器卡死的情况,而又不方便排查,只能依靠quartz的debug日志以及错误日志来监控定时器的执行情况,并且随着我们系统中job越来越多,而使得job ...
- Notes for uc/OS-III User Guide
1. Architecture F2-1(1) The application code consists of project or product files. For convenience, ...
- python中怎样指定open编码为ansi
在Python中,当使用open函数打开文件时,可以通过encoding参数来指定文件的编码方式.然而,需要注意的是,Python标准库中的编码并不直接支持名为"ANSI"的编码, ...
- 基于donetcore/CAP实现分布式事务一致性
官网:https://cap.dotnetcore.xyz 相关介绍 CAP 是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架.它有助于创建可扩展,可靠并且易于 ...