Cara menggunakan filter tindakan di ASP.NET Core MVC

Filter di ASP.NET Core MVC memungkinkan kita untuk mengeksekusi kode sebelum atau setelah tahap tertentu dari pipeline pemrosesan permintaan. Berbagai jenis filter sesuai dengan tahapan pipeline yang berbeda, dari otorisasi hingga eksekusi hasil.

Misalnya, Anda dapat memanfaatkan filter tindakan di ASP.NET Core MVC untuk menjalankan kode kustom sebelum dan sesudah eksekusi metode tindakan. Artikel ini menyajikan diskusi tentang filter bawaan di ASP.NET Core MVC, mengapa berguna, dan bagaimana kami dapat menggunakan filter tindakan di aplikasi ASP.NET Core kami.

Filter di ASP.NET Core MVC

ASP.NET Core MVC berisi banyak filter bawaan. Ini termasuk yang berikut:

  • ActionFilters. Ini dijalankan sebelum dan sesudah eksekusi metode aksi pengontrol. 
  • AuthorizationFilters. Filter ini dijalankan di awal pipeline permintaan. Mereka digunakan untuk memvalidasi kredensial pengguna untuk memeriksa apakah pengguna berwenang. 
  • ResourceFilters. Filter ini dijalankan setelah otorisasi dan sebelum pengikatan model terjadi. Anda dapat memanfaatkan ResourceFilters untuk mengimplementasikan caching. 
  • ResultFilters. Filter ini digunakan untuk mengeksekusi kode sebelum dan setelah IActionResult metode tindakan dijalankan. 
  • ExceptionFilters. Filter ini digunakan untuk menangani pengecualian apa pun yang terjadi di pipeline. Anda dapat memanfaatkan ExceptionFilters untuk mengeksekusi kode kustom saat pengecualian terjadi. 

Pilihan jenis filter yang akan digunakan bergantung pada apa yang ingin Anda capai. Sebagai contoh, jika Anda mencoba untuk menghentikan permintaan (yaitu, menghentikan metode tindakan dari mengeksekusi dan mengembalikan hasil sebelum waktunya), Anda akan menggunakan filter sumber daya. Alternatifnya, jika Anda mencoba mengubah parameter metode tindakan dan hasil yang dikembalikan dari metode tindakan, Anda akan menggunakan filter tindakan.

Kelas ActionFilterAttribute mengimplementasikan antarmuka IActionFilter, IAsyncActionFilter, IResultFilter, IAsyncResultFilter, dan IOrderedFilter. Anda dapat memanfaatkan kelas ini untuk mengimplementasikan filter metode, filter pengontrol, atau filter global. Kami akan membahasnya nanti di artikel ini.

Buat proyek ASP.NET Core Web API di Visual Studio 2017

Pertama, mari buat proyek ASP.NET Core Web API di Visual Studio. Jika Visual Studio 2017 aktif dan berjalan di sistem Anda, ikuti langkah-langkah di bawah ini untuk membuat proyek ASP.NET Core MVC.

  1. Luncurkan Visual Studio 2017 IDE.
  2. Klik File> New> Project.
  3. Pilih "ASP.NET Core Web Application (.NET Core)" dari daftar template yang ditampilkan.
  4. Tentukan nama untuk proyek tersebut.
  5. Klik OK untuk menyimpan proyek.
  6. Jendela baru, "Aplikasi Web Inti .NET Baru ...", akan ditampilkan.
  7. Pilih .NET Core sebagai runtime dan ASP.NET Core 2.1 (atau yang lebih baru) dari daftar drop-down di bagian atas.
  8. Pilih "Aplikasi Web (Model-View-Controller)" sebagai template proyek. 
  9. Pastikan kotak centang "Aktifkan Dukungan Docker" dan "Konfigurasi untuk HTTPS" tidak dicentang. Kami tidak akan menggunakan fitur ini di sini.
  10. Pastikan bahwa “No Authentication” dipilih. Kami juga tidak akan menggunakan otentikasi di sini. 

Ini akan membuat proyek ASP.NET Core MVC baru di Visual Studio. Kami akan menggunakan proyek ini untuk menerapkan filter tindakan kami di bagian selanjutnya.

Buat filter tindakan kustom di ASP.NET Core MVC

Anda dapat memanfaatkan filter tindakan kustom untuk menjalankan kode yang dapat digunakan kembali sebelum atau setelah eksekusi metode tindakan. Anda dapat memperluas kelas dasar abstrak berikut untuk membuat filter kustom. Perhatikan bahwa setiap kelas abstrak ini memperluas kelas Atribut.

  • ActionFilterAttribute
  • ResultFilterAttribute
  • ExceptionFilterAttribute
  • ServiceFilterAttribute
  • TypeFilterAttribute

Anda juga dapat memperluas antarmuka IActionFilter dan mengimplementasikan metodenya untuk membuat filter kustom. Anda dapat membuat filter sinkron dan asinkron.

Buat filter tindakan sinkron di ASP.NET Core MVC

Cuplikan kode berikut mengilustrasikan bagaimana filter tindakan sinkron dapat dibuat dengan memperluas antarmuka IActionFilter dan mengimplementasikan metode OnActionExecuting dan OnActionExecuted.

kelas publik SimpleActionFilter: IActionFilter

    {

        public void OnActionExecuting (konteks ActionExecutingContext)

        {

            // metode ini akan dijalankan sebelum eksekusi metode aksi 

        }

        public void OnActionExecuted (konteks ActionExecutedContext)

        {

            // metode ini akan dijalankan setelah metode aksi dijalankan 

        }

    }

Buat filter tindakan asinkron di ASP.NET Core MVC

Untuk membuat filter tindakan asinkron, Anda dapat memperluas antarmuka IAsyncActionFilter dan menerapkan metode OnActionExecutionAsync seperti yang ditunjukkan pada cuplikan kode di bawah ini.

kelas publik SimpleAsyncActionFilter: IAsyncActionFilter

    {

        public async Task OnActionExecutionAsync (konteks ActionExecutingContext,

          ActionExecutionDelegate berikutnya)

        {

            // kode yang ditulis di sini akan dieksekusi sebelum eksekusi metode aksi 

            menunggu next ();

            // kode yang ditulis di sini akan dieksekusi setelah eksekusi metode aksi 

        }

    }

Tambahkan filter tindakan dalam metode ConfigureServices di ASP.NET Core

Anda dapat menambahkan filter pada berbagai tingkat cakupan. Ini termasuk ruang lingkup tindakan, lingkup pengontrol, dan lingkup global. Cuplikan kode berikut menggambarkan bagaimana Anda dapat menambahkan filter dalam cakupan global. Perhatikan bagaimana filter tindakan kustom yang kami terapkan di atas ditambahkan ke koleksi filter di metode ConfigureServices pada kelas Startup. Perhatikan bahwa filter ditambahkan ke koleksi filter dengan contoh.

services.AddMvc (opsi =>

            {

                options.Filters.Add (SimpleAsyncActionFilter ()) baru;

            }). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Anda juga dapat menambahkan filter berdasarkan jenis seperti yang ditunjukkan pada cuplikan kode di bawah ini.

services.AddMvc (opsi =>

            {

                options.Filters.Add (typeof (SimpleAsyncActionFilter));

            }). SetCompatibilityVersion (CompatibilityVersion.Version_2_1);

Filter memungkinkan Anda mengeksekusi kode sebelum atau setelah titik tertentu dalam pipeline pemrosesan permintaan. Salah satu perbaikan baru yang hebat dalam filter tindakan di ASP.NET Core MVC adalah kemampuan untuk menentukan urutan eksekusi filter di pipa permintaan HTTP. Kami akan memeriksa ini dan banyak lagi fitur filter di ASP.NET Core MVC di posting mendatang.