全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

asp.net core MVC 过滤器之ActionFilter过滤器(2)

简介

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小时内与您取得联系。