您现在的位置是:网站首页> 编程资料编程资料
asp.net core MVC 过滤器之ActionFilter过滤器(2)_实用技巧_
2023-05-24
366人已围观
简介 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(); var logger = factory.CreateLogger(); 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(); }); 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 基于localStorge开发登录模块的记住密码与自动登录实例_实用技巧_
- asp.net开发sql server转换成oracle的方法详解_实用技巧_
- asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)_实用技巧_
- VS2015 IIS Express无法启动的解决方法_实用技巧_
- ASP.NET MVC下Bundle的使用方法_实用技巧_
- 浅谈Asp.net Mvc之Action如何传多个参数的方法_实用技巧_
- Razor模板引擎简单介绍_实用技巧_
- 微信语音上传 下载功能实例代码_实用技巧_
- ASP.Net MVC 布局页、模板页使用方法详细介绍_实用技巧_
- 基于MVC4+EasyUI的Web开发框架之附件上传组件uploadify的使用_实用技巧_
