旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

asp.net之ActionFilter过滤器【C#.Net教程】,ActionFilter,asp.net,过滤器

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:36评论:0


导读:这篇文章主要为人人细致引见了asp.netcoreMVC过滤器之ActionFilter过滤器,具有肯定的参考价值,感兴趣的小伙伴们能够参考一下本系类将会解说asp....
这篇文章主要为人人细致引见了asp.net core MVC 过滤器之ActionFilter过滤器,具有肯定的参考价值,感兴趣的小伙伴们能够参考一下

本系类将会解说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>();
      });

以上就是asp.net之ActionFilter过滤器的细致内容,更多请关注ki4网别的相干文章!

标签:ActionFilterasp.net过滤器


欢迎 发表评论: