简介

Action过滤器将在controller的Action执行之前和之后执行相应的方法。
实现一个自定义Action过滤器
自定义一个全局异常过滤器需要实现IActionFilter接口
public class ActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("action执行之后");
}
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine("action执行之前");
}
}
IActionFilter需要实现两个方法OnActionExecuted,OnActionExecuting。OnActionExecuting将在Action之前执行,OnActionExecuted在Action之后执行。
知道原理之后我们们就可以利用其特性来简化我们的代码,在MVC中一个重要的概念就时Model验证,我们定义Model约束,然后在Action中验证Model是否绑定成功,我们的Action中重复地写如下代码
[HttpGet]
public ActionResult Get()
{
if (!ModelState.IsValid) return BadRequest("参数错误!");
}
这样重复的代码不仅增加代码复杂都也不美观,我们可以在ActionFilter中自动完成
public void OnActionExecuting(ActionExecutingContext context)
{
if (context.ModelState.IsValid) return;
var modelState = context.ModelState.FirstOrDefault(f => f.Value.Errors.Any());
string errorMsg = modelState.Value.Errors.First().ErrorMessage;
throw new AppException(errorMsg);
}
当Model绑定错误时,我们抛出异常信息,并在上一章节的异常过滤器ExceptionFilter中捕获,返回错误信息给请求方。
我们也可以利用ActionFilter的特性来记录Action的执行时间,当Action执行时间过慢时输出警告日志
public class ActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
var httpContext = context.HttpContext;
var stopwach = httpContext.Items[Resources.StopwachKey] as Stopwatch;
stopwach.Stop();
var time = stopwach.Elapsed;
if (time.TotalSeconds > 5)
{
var factory = context.HttpContext.RequestServices.GetService<ILoggerFactory>();
var logger = factory.CreateLogger<ActionExecutedContext>();
logger.LogWarning($"{context.ActionDescriptor.DisplayName}执行耗时:{time.ToString()}");
}
}
public void OnActionExecuting(ActionExecutingContext context)
{
var stopwach = new Stopwatch();
stopwach.Start();
context.HttpContext.Items.Add(Resources.StopwachKey, stopwach);
}
}
上面的代码利用使用HttpContext传递一个Stopwach来计算action的执行时间,并在超过5秒时输出警告日志。
注册全局过滤器
注册方法与ExceptionFinter相同。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下
services.AddMvc(options =>
{
options.Filters.Add<ActionFilter>();
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# asp.net core MVC
# 过滤器
# ActionFilter
# ASP.NET Core MVC中过滤器工作原理介绍
# ASP.NET Core MVC 过滤器(Filter)
# ASP.NET Core MVC 过滤器的使用方法介绍
# asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)
# ASP.NET Core MVC过滤器运行流程解析
# 执行时间
# 将在
# 并在
# 自定义
# 绑定
# 也不
# 我们可以
# 一个重要
# 错误信息
# 可以利用
# 抛出
# 大家多多
# 就可以
# 自动完成
# 方法如下
# 过慢
# ModelState
# ActionResult
# BadRequest
# Errors
相关文章:
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
昆明高端网站制作公司,昆明公租房申请网上登录入口?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
网站制作话术技巧,网站推广做的好怎么话术?
IOS倒计时设置UIButton标题title的抖动问题
山东云建站价格为何差异显著?
建站主机与虚拟主机有何区别?如何选择最优方案?
非常酷的网站设计制作软件,酷培ai教育官方网站?
企业微网站怎么做,公司网站和公众号有什么区别?
如何在建站之星网店版论坛获取技术支持?
网站制作企业,网站的banner和导航栏是指什么?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何在企业微信快速生成手机电脑官网?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
宝塔新建站点为何无法访问?如何排查?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
如何快速使用云服务器搭建个人网站?
如何高效利用亚马逊云主机搭建企业网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
教学论文网站制作软件有哪些,写论文用什么软件
?
MySQL查询结果复制到新表的方法(更新、插入)
如何零成本快速生成个人自助网站?
网站网页制作专业公司,怎样制作自己的网页?
如何零基础开发自助建站系统?完整教程解析
建站之星会员如何解锁更多建站功能?
宿州网站制作公司兴策,安徽省低保查询网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何设置并定期更换建站之星安全管理员密码?
建站主机SSH密钥生成步骤及常见问题解答?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
建站之星在线客服如何快速接入解答?
成都网站制作报价公司,成都工业用气开户费用?
完全自定义免费建站平台:主题模板在线生成一站式服务
音乐网站服务器如何优化API响应速度?
建站之星代理如何优化在线客服效率?
建站主机是什么?如何选择适合的建站主机?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在橙子建站上传落地页?操作指南详解
如何在新浪SAE免费搭建个人博客?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在Tomcat中配置并部署网站项目?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何快速搭建支持数据库操作的智能建站平台?
兔展官网 在线制作,怎样制作微信请帖?
如何在腾讯云服务器上快速搭建个人网站?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
代购小票制作网站有哪些,购物小票的简要说明?
*请认真填写需求信息,我们会在24小时内与您取得联系。