麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

asp.net core MVC 過濾器之ActionFilter過濾器(2)

2024-07-10 13:32:38
字體:
來源:轉載
供稿:網友

本系類將會講解asp.net core MVC中的內置過濾器的使用,將分為以下章節

  asp.net core MVC 過濾器之ExceptionFilter過濾器(一)

  asp.net core MVC 過濾器之ActionFilter過濾器(二)

  asp.net core MVC 過濾器之ResultFilter過濾器(三)

  asp.net core MVC 過濾器之ResourceFilter過濾器(四)

  asp.net core MVC 過濾器之AuthorizationFilter過濾器(五)

簡介

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>();      });

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 视频h在线| 国产一区二区三区四区五区精品 | asian裸体佳人pics | 特逼视频| 国产精品久久久久久模特 | 九九精品在线观看视频 | 午夜精品久久久久久久爽 | 午夜视频久久 | 一区www | 亚洲国产网站 | 国产精品久久久毛片 | 姑娘第四集免费看视频 | 日韩黄色av | 青青草最新网址 | 免费看日产一区二区三区 | 成人一级毛片 | 日本看片一区二区三区高清 | 国产精品18久久久久久久久 | 曰韩一级片 | 亚洲一级片在线观看 | 日韩黄色一级视频 | 黄色网址入口 | 在线播放中文 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 | 欧美成人小视频 | 欧美一级黄色录相 | 精品久久久久久久久久久久久久 | 国产精品刺激对白麻豆99 | 亚洲最大的成人网 | 国产精品视频在线观看免费 | 国产艳妇av视国产精选av一区 | 欧美视频不卡 | 成人不卡一区二区 | 久久久久久久免费视频 | 一区二区三区视频在线观看 | 国产精品剧情一区二区三区 | 一级黄色影院 | 热99精品视频 | 亚洲精品有限 | 国产美女的小嫩bbb图片 | 日本xxxx视频|