日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core MVC 过滤器之ActionFilter过滤器(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

Action過濾器將在controller的Action執(zhí)行之前和之后執(zhí)行相應(yīng)的方法。

實現(xiàn)一個自定義Action過濾器

自定義一個全局異常過濾器需要實現(xiàn)IActionFilter接口

public class ActionFilter : IActionFilter

{

? ? public void OnActionExecuted(ActionExecutedContext context)

? ? {

? ? ? ? Console.WriteLine("action執(zhí)行之后");

? ? }


? ? public void OnActionExecuting(ActionExecutingContext context)

? ? {

? ? ? ? Console.WriteLine("action執(zhí)行之前");

? ? }

}

IActionFilter需要實現(xiàn)兩個方法OnActionExecuted,OnActionExecuting。OnActionExecuting將在Action之前執(zhí)行,OnActionExecuted在Action之后執(zhí)行。

知道原理之后我們們就可以利用其特性來簡化我們的代碼,在MVC中一個重要的概念就時Model驗證,我們定義Model約束,然后在Action中驗證Model是否綁定成功,我們的Action中重復(fù)地寫如下代碼?

[HttpGet]public ActionResult Get() { ?
?
if (!ModelState.IsValid)
return BadRequest("參數(shù)錯誤!");
}

?這樣重復(fù)的代碼不僅增加代碼復(fù)雜都也不美觀,我們可以在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);

}

當(dāng)Model綁定錯誤時,我們拋出異常信息,并在上一章節(jié)的異常過濾器ExceptionFilter中捕獲,返回錯誤信息給請求方。

我們也可以利用ActionFilter的特性來記錄Action的執(zhí)行時間,當(dāng)Action執(zhí)行時間過慢時輸出警告日志

?

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}執(zhí)行耗時:{time.ToString()}");

? ? ? ? }

? ? }


? ? public void OnActionExecuting(ActionExecutingContext context)

? ? {

? ? ? ? var stopwach = new Stopwatch();

? ? ? ? stopwach.Start();

? ? ? ? context.HttpContext.Items.Add(Resources.StopwachKey, stopwach);

? ? }

}

上面的代碼利用使用HttpContext傳遞一個Stopwach來計算action的執(zhí)行時間,并在超過5秒時輸出警告日志。?

注冊全局過濾器

注冊方法與ExceptionFinter相同。找到系統(tǒng)根目錄Startup.cs文件,修改ConfigureServices方法如下

services.AddMvc(options =>{options.Filters.Add<ActionFilter>();});

相關(guān)文章:?

  • .NET Core 2.0 正式發(fā)布信息匯總

  • .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組件 NPOI

  • ASP.NET Core Razor頁面 vs MVC

  • Razor Page–Asp.Net Core 2.0新功能 ?Razor Page介紹

  • MySql 使用 EF Core 2.0 CodeFirst、DbFirst、數(shù)據(jù)庫遷移(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社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的asp.net core MVC 过滤器之ActionFilter过滤器(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。