优普南通网站建设,2023年度最火关键词,防伪码网站怎么做,桔子seo简介
Action过滤器将在controller的Action执行之前和之后执行相应的方法。
实现一个自定义Action过滤器
自定义一个全局异常过滤器需要实现IActionFilter接口
public class ActionFilter : IActionFilter
{ public void OnActionExecuted(ActionExecutedContext context) …简介
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需要实现两个方法OnActionExecutedOnActionExecuting。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.GetServiceILoggerFactory(); var logger factory.CreateLoggerActionExecutedContext(); 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.AddActionFilter();});
相关文章
.NET Core 2.0 正式发布信息汇总.NET Standard 2.0 特性介绍和使用指南.NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决.NET Core 2.0 特性介绍和使用指南Entity Framework Core 2.0 新特性体验 PHP under .NET Core.NET Core 2.0使用NLog升级项目到.NET Core 2.0在Linux上安装Docker并成功部署解决Visual Studio For Mac Restore失败的问题ASP.NET Core 2.0 特性介绍和使用指南.Net Core下通过Proxy 模式 使用 WCF.NET Core 2.0 开源Office组件 NPOIASP.NET Core Razor页面 vs MVCRazor Page–Asp.Net Core 2.0新功能 Razor Page介绍MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移Migration介绍及示例.NET Core 2.0迁移技巧之web.config配置文件asp.net core MVC 过滤器之ExceptionFilter过滤器(一)ASP.NET Core 使用Cookie验证身份
原文地址http://www.cnblogs.com/huanent/p/7421220.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注