本系类将会讲解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>();
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]