Kerangka kerja MVC - Filter Tindakan

Dalam ASP.NET MVC, pengontrol menentukan metode tindakan dan metode tindakan ini umumnya memiliki hubungan satu-ke-satu dengan kontrol UI, seperti mengklik tombol atau tautan, dll. Misalnya, di salah satu contoh sebelumnya, UserController kelas berisi metode UserAdd, UserDelete, dll.

Namun, seringkali kami ingin melakukan beberapa tindakan sebelum atau setelah operasi tertentu. Untuk mencapai fungsionalitas ini, ASP.NET MVC menyediakan fitur untuk menambahkan perilaku sebelum dan sesudah tindakan pada metode tindakan pengontrol.

Jenis Filter

Kerangka kerja ASP.NET MVC mendukung filter tindakan berikut -

  • Action Filters- Filter aksi digunakan untuk mengimplementasikan logika yang dieksekusi sebelum dan sesudah aksi pengontrol dijalankan. Kami akan melihat Filter Tindakan secara rinci di bab ini.

  • Authorization Filters - Filter otorisasi digunakan untuk mengimplementasikan otentikasi dan otorisasi untuk tindakan pengontrol.

  • Result Filters- Filter hasil berisi logika yang dijalankan sebelum dan setelah hasil tampilan dijalankan. Misalnya, Anda mungkin ingin mengubah hasil tampilan tepat sebelum tampilan tersebut dirender ke browser.

  • Exception Filters- Filter pengecualian adalah jenis filter terakhir yang dijalankan. Anda dapat menggunakan filter pengecualian untuk menangani kesalahan yang muncul baik oleh tindakan pengontrol atau hasil tindakan pengontrol. Anda juga dapat menggunakan filter pengecualian untuk mencatat kesalahan.

Filter tindakan adalah salah satu filter yang paling umum digunakan untuk melakukan pemrosesan data tambahan, atau memanipulasi nilai yang dikembalikan atau membatalkan eksekusi tindakan atau mengubah struktur tampilan pada waktu proses.

Filter Tindakan

Filter Tindakan adalah atribut tambahan yang dapat diterapkan ke bagian pengontrol atau seluruh pengontrol untuk mengubah cara tindakan dijalankan. Atribut ini adalah kelas .NET khusus yang diturunkan dari System.Attribute yang dapat dilampirkan ke kelas, metode, properti, dan bidang.

ASP.NET MVC menyediakan filter tindakan berikut -

  • Output Cache - Filter tindakan ini menyimpan output dari tindakan pengontrol untuk jangka waktu tertentu.

  • Handle Error - Filter tindakan ini menangani kesalahan yang muncul saat tindakan pengontrol dijalankan.

  • Authorize - Filter tindakan ini memungkinkan Anda membatasi akses ke pengguna atau peran tertentu.

Sekarang, kita akan melihat contoh kode untuk menerapkan filter ini pada contoh pengontrol ActionFilterDemoController. (ActionFilterDemoController hanya digunakan sebagai contoh. Anda dapat menggunakan filter ini di salah satu pengontrol Anda.)

Output Cache

Example - Menentukan nilai pengembalian yang akan di-cache selama 10 detik.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

Tangani Error

Example - Mengarahkan ulang aplikasi ke halaman kesalahan khusus ketika kesalahan dipicu oleh pengontrol.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

Dengan kode di atas, jika terjadi kesalahan selama eksekusi tindakan, ia akan menemukan tampilan bernama Error di folder Views dan membuat halaman itu ke pengguna.

Mengizinkan

Example - Mengizinkan hanya pengguna yang berwenang untuk masuk ke aplikasi.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

Dengan kode di atas, jika Anda mencoba mengakses aplikasi tanpa masuk, itu akan memunculkan kesalahan yang mirip dengan yang ditunjukkan pada tangkapan layar berikut.