Rumah pembangunan bahagian belakang Tutorial C#.Net asp.net之ActionFilter过滤器

asp.net之ActionFilter过滤器

Sep 01, 2017 pm 02:41 PM
asp.net penapis

这篇文章主要为大家详细介绍了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执行之前");
  }
}
Salin selepas log masuk

IActionFilter需要实现两个方法OnActionExecuted,OnActionExecuting。OnActionExecuting将在Action之前执行,OnActionExecuted在Action之后执行。

知道原理之后我们们就可以利用其特性来简化我们的代码,在MVC中一个重要的概念就时Model验证,我们定义Model约束,然后在Action中验证Model是否绑定成功,我们的Action中重复地写如下代码


[HttpGet]
public ActionResult Get()
{
  if (!ModelState.IsValid) return BadRequest("参数错误!");
}
Salin selepas log masuk

这样重复的代码不仅增加代码复杂都也不美观,我们可以在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);
}
Salin selepas log masuk

当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);
  }
}
Salin selepas log masuk

上面的代码利用使用HttpContext传递一个Stopwach来计算action的执行时间,并在超过5秒时输出警告日志。

注册全局过滤器

注册方法与ExceptionFinter相同。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下


services.AddMvc(options =>
      {
        options.Filters.Add<ActionFilter>();
      });
Salin selepas log masuk

Atas ialah kandungan terperinci asp.net之ActionFilter过滤器. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ralat Vue: Penapis dalam penapis tidak boleh digunakan dengan betul, bagaimana untuk menyelesaikannya? Ralat Vue: Penapis dalam penapis tidak boleh digunakan dengan betul, bagaimana untuk menyelesaikannya? Aug 26, 2023 pm 01:10 PM

Ralat Vue: Penapis dalam penapis tidak boleh digunakan dengan betul, bagaimana untuk menyelesaikannya? Pengenalan: Dalam Vue, penapis ialah fungsi yang biasa digunakan yang boleh digunakan untuk memformat atau menapis data. Walau bagaimanapun, semasa penggunaan, kadangkala kita mungkin menghadapi masalah kerana tidak dapat menggunakan penapis dengan betul. Artikel ini akan membincangkan beberapa sebab dan penyelesaian biasa. 1. Analisis sebab: Penapis tidak didaftarkan dengan betul: Penapis dalam Vue perlu didaftarkan sebelum ia boleh digunakan dalam templat. Jika penapis tidak berjaya didaftarkan,

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Cara menapis dan mengisih data dalam pembangunan teknologi Vue Oct 09, 2023 pm 01:25 PM

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Dalam pembangunan teknologi Vue, penapisan dan pengisihan data adalah fungsi yang sangat biasa dan penting. Melalui penapisan dan pengisihan data, kami boleh membuat pertanyaan dan memaparkan maklumat yang kami perlukan dengan cepat, meningkatkan pengalaman pengguna. Artikel ini akan memperkenalkan cara menapis dan mengisih data dalam Vue, dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan fungsi ini dengan lebih baik. 1. Penapisan data Penapisan data merujuk kepada penapisan data yang memenuhi keperluan berdasarkan syarat tertentu. Dalam Vue, kita boleh lulus comp

Fungsi penapis dalam Vue3: mengendalikan data dengan elegan Fungsi penapis dalam Vue3: mengendalikan data dengan elegan Jun 18, 2023 pm 02:46 PM

Fungsi Penapis dalam Vue3: Mengendalikan Data Secara Elegan Vue ialah rangka kerja JavaScript yang popular dengan komuniti yang besar dan sistem pemalam yang berkuasa. Dalam Vue, fungsi penapis ialah alat yang sangat praktikal yang membolehkan kami memproses dan memformat data dalam templat. Terdapat beberapa perubahan pada fungsi penapis dalam Vue3 Dalam artikel ini, kami akan menyelami fungsi penapis dalam Vue3 dan mempelajari cara menggunakannya untuk mengendalikan data dengan anggun. Apakah fungsi penapis? Dalam Vue, fungsi penapis ialah

Dalam PHP, pemalar FILTER_VALIDATE_URL mewakili penapis yang digunakan untuk mengesahkan URL Dalam PHP, pemalar FILTER_VALIDATE_URL mewakili penapis yang digunakan untuk mengesahkan URL Sep 14, 2023 am 10:37 AM

Pemalar FILTER_VALIDATE_URL digunakan untuk mengesahkan URL. Bendera FILTER_FLAG_SCHEME_REQUIRED−URL mestilah mematuhi RFC. FILTER_FLAG_HOST_REQUIRED−URL mesti mengandungi nama hos. FILTER_FLAG_PATH_REQUIRED−URL mesti mempunyai laluan selepas nama domain. FILTER_FLAG_QUERY_REQUIRED−URL mesti mempunyai rentetan pertanyaan. Nilai pulangan FILTER_VALIDATE_URL

Penapis E-mel PHP: Tapis dan kenal pasti spam. Penapis E-mel PHP: Tapis dan kenal pasti spam. Sep 19, 2023 pm 12:51 PM

Penapis E-mel PHP: Tapis dan kenal pasti spam. Dengan penggunaan e-mel yang meluas, jumlah spam juga terus meningkat. Bagi pengguna, jumlah spam yang mereka terima boleh menyebabkan maklumat yang berlebihan dan masa yang sia-sia. Oleh itu, kami memerlukan kaedah yang cekap untuk menapis dan mengenal pasti e-mel spam. Artikel ini akan menunjukkan kepada anda cara menulis penapis e-mel yang ringkas tetapi berkesan menggunakan PHP dan memberikan contoh kod khusus. Prinsip Asas Penapis E-mel Prinsip asas penapis e-mel adalah untuk menentukan sama ada e-mel itu

Petua untuk menggunakan pemalam untuk melaksanakan penapis tersuai dalam Vue Petua untuk menggunakan pemalam untuk melaksanakan penapis tersuai dalam Vue Jun 25, 2023 pm 05:01 PM

Petua untuk menggunakan pemalam untuk melaksanakan penapis tersuai dalam Vue Vue.js menyediakan cara yang mudah untuk mengendalikan keperluan untuk penapisan data paparan, iaitu penapis. Penapis bertanggungjawab terutamanya untuk memformat dan memproses data dalam paparan untuk menjadikan data lebih intuitif dan mudah difahami. Vue mempunyai beberapa penapis terbina dalam yang biasa digunakan, seperti pemformatan tarikh, pemformatan mata wang, dsb., dan juga menyokong penapis tersuai. Artikel ini akan memperkenalkan cara menggunakan pemalam Vue untuk melaksanakan penapis tersuai dan menyediakan beberapa teknik penapisan praktikal.

Beberapa kaedah untuk menyelesaikan kod Tomcat bercelaru Beberapa kaedah untuk menyelesaikan kod Tomcat bercelaru Dec 28, 2023 pm 01:32 PM

Beberapa kaedah untuk menyelesaikan masalah aksara Cina yang kacau dalam Tomcat, yang memerlukan contoh kod khusus Dalam pembangunan web, kami sering menghadapi masalah aksara Cina yang kacau dalam Tomcat. Masalah ini akan menyebabkan aksara bercelaru atau muncul sebagai kotak, tanda soal dan aksara lain apabila memproses aksara Cina, membawa pengalaman buruk kepada pengguna. Untuk menyelesaikan masalah ini, artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan dan memberikan contoh kod khusus. Ubah suai fail konfigurasi Tomcat Cari fail conf/server.xml dalam direktori pemasangan Tomcat dan cari lalai

Modul Pembalakan Python Demystified: Melihat lebih dekat pada keupayaannya Modul Pembalakan Python Demystified: Melihat lebih dekat pada keupayaannya Feb 21, 2024 am 09:30 AM

Modul pythonLogging ialah alat yang berkuasa untuk menguruskan pengelogan aplikasi. Ia menyediakan rangka kerja yang fleksibel dan boleh dikonfigurasikan yang membolehkan pembangun mengawal penjanaan, pemprosesan dan paparan maklumat log. Tahap Pengelogan Modul Pengelogan mentakrifkan beberapa peringkat pengelogan untuk menentukan kepentingan mesej log. Tahap ini disusun mengikut tahap keterukan: DEBUG: Digunakan untuk tujuan penyahpepijatan dan pembangunan, mengelog maklumat penyahpepijatan terperinci. INFO: Log maklumat aplikasi umum seperti acara dan operasi. AMARAN: Log masalah atau pengecualian yang berpotensi yang tidak semestinya mengganggu aplikasi. RALAT: Log ralat atau pengecualian serius yang boleh menyebabkan kegagalan aplikasi. KRITIKAL: Rekod dalam bahaya

See all articles