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 ...
随机推荐
- 【Vue】树状节点接口 与 级联选择框组件
原来有一个组织机构的渲染, 我自己写的我自己看也8太明白了: https://www.cnblogs.com/mindzone/p/14888046.html 现在,有一个位置选择,使用这个级联选择器 ...
- 【Vue2】Router 路由
1.什么是单页面应用程序 单页面应用程序(英文名: Single Page Application)简称SPA, 顾名思义,指的是一个Web网站中只有唯一-的一-个HTML页面, 所有的功能与交互都在 ...
- nvidia公司官方迁移学习套件 —— NVIDIA TAO Toolkit
资料: https://blogs.nvidia.com/blog/what-is-transfer-learning/ 相关: https://developer.nvidia.com/tao-to ...
- Jax计算框架的JIT编译的static特性
官方: https://jax.readthedocs.io/en/latest/notebooks/thinking_in_jax.html#jit-mechanics-tracing-and-st ...
- 读《PyTorch + NumPy这么做会降低模型准确率,这是bug还是预期功能?》
看了文章: [转载] 浅谈PyTorch的可重复性问题(如何使实验结果可复现) 然后,转到: PyTorch + NumPy这么做会降低模型准确率,这是bug还是预期功能? 发现了在pytorch中的 ...
- 【转载】 模仿学习:在线模仿学习与离线模仿学习 ———— Imitate with Caution: Offline and Online Imitation
网上闲逛找到的一篇文章,介绍模仿学习的,题目: Imitate with Caution: Offline and Online Imitation 之所以转载这个文章是因为这个文章还是蛮浅显易懂的, ...
- HDMI和DP双屏幕连接,对于BIOS来说哪个优先级高——DP连接优先级高于HDMI
最近被博导忽悠了,说是实验室的国家项目结项了,有几十万的资金没有花掉,于是每个人都有了1W的报销金额,由于是结项所用因此只能报销耗材.我这人呢,平时是绝对不占小便宜的,但这次是个大便宜,于是就有些没把 ...
- 海豚调度调优 | 如何解决任务被禁用出现的Bug
本系列文章是 DolphinScheduler 由浅入深的教程,涵盖搭建.二开迭代.核心原理解读.运维和管理等一系列内容.适用于想对 DolphinScheduler了解或想要加深理解的读者. 祝开卷 ...
- LVGL line组件
目录 一.Line(线条)的概念 二.线条组件的使用 1.创建线条对象 2.设置点数组 3.确定y轴的方向(可选) 4.设置线条风格(可选) 4.1创建风格 4.2设置风格 5.将创建好的线段组件添加 ...
- 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 本文介绍了五种加速在国内访问和下载 GitHub 的方法,包括:使用 Gitee 平台加速克隆代码.修改 hosts 文件.使用油猴 ...