Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Microsoft
Tujuan tutorial ini adalah untuk menjelaskan filter tindakan. Filter tindakan adalah atribut yang dapat Anda terapkan ke tindakan pengontrol -- atau seluruh pengontrol -- yang memodifikasi cara tindakan dijalankan.
Memahami Filter Tindakan
Tujuan tutorial ini adalah untuk menjelaskan filter tindakan. Filter tindakan adalah atribut yang dapat Anda terapkan ke tindakan pengontrol -- atau seluruh pengontrol -- yang memodifikasi cara tindakan dijalankan. Kerangka kerja MVC ASP.NET mencakup beberapa filter tindakan:
- OutputCache – Filter tindakan ini menyimpan output tindakan pengontrol untuk jumlah waktu tertentu.
- HandleError – Filter tindakan ini menangani kesalahan yang dimunculkan saat tindakan pengontrol dijalankan.
- Otorisasi – Filter tindakan ini memungkinkan Anda membatasi akses ke pengguna atau peran tertentu.
Anda juga dapat membuat filter tindakan kustom Anda sendiri. Misalnya, Anda mungkin ingin membuat filter tindakan kustom untuk menerapkan sistem autentikasi kustom. Atau, Anda mungkin ingin membuat filter tindakan yang memodifikasi data tampilan yang dikembalikan oleh tindakan pengontrol.
Dalam tutorial ini, Anda mempelajari cara membangun filter tindakan dari bawah ke atas. Kami membuat filter tindakan Log yang mencatat berbagai tahap pemrosesan tindakan ke jendela Output Visual Studio.
Menggunakan Filter Tindakan
Filter tindakan adalah atribut . Anda dapat menerapkan sebagian besar filter tindakan ke tindakan pengontrol individual atau seluruh pengontrol.
Misalnya, Pengontrol data di Daftar 1 memaparkan tindakan bernama Index() yang mengembalikan waktu saat ini. Tindakan ini dihiasi dengan OutputCache filter tindakan. Filter ini menyebabkan nilai yang dikembalikan oleh tindakan di-cache selama 10 detik.
Daftar 1 – Controllers\DataController.vb
Public Class DataController
Inherits System.Web.Mvc.Controller
<OutputCache(Duration:=10)> _
Function Index()
Return DateTime.Now.ToString("T")
End Function
End Class
Jika Anda berulang kali memanggil Index() tindakan dengan memasukkan URL /Data/Index ke bilah alamat browser Anda dan menekan tombol Refresh beberapa kali, maka Anda akan melihat waktu yang sama selama 10 detik. Output Index() tindakan di-cache selama 10 detik (lihat Gambar 1).
Gambar 01: Waktu singgahan (Klik untuk melihat gambar ukuran penuh)
Di Daftar 1, satu filter tindakan – OutputCache filter tindakan – diterapkan ke Index() metode . Jika perlu, Anda dapat menerapkan beberapa filter tindakan ke tindakan yang sama. Misalnya, Anda mungkin ingin menerapkan OutputCache filter tindakan dan HandleError ke tindakan yang sama.
Di Daftar 1, OutputCache filter tindakan diterapkan ke Index() tindakan. Anda juga dapat menerapkan atribut ini ke kelas itu DataController sendiri. Dalam hal ini, hasil yang dikembalikan oleh tindakan apa pun yang diekspos oleh pengontrol akan di-cache selama 10 detik.
Berbagai Jenis Filter
Kerangka kerja MVC ASP.NET mendukung empat jenis filter yang berbeda:
- Filter otorisasi – Mengimplementasikan
IAuthorizationFilteratribut . - Filter tindakan – Mengimplementasikan
IActionFilteratribut . - Filter hasil
IResultFilter– Mengimplementasikan atribut . - Filter pengecualian – Mengimplementasikan
IExceptionFilteratribut .
Filter dijalankan dalam urutan yang tercantum di atas. Misalnya, filter otorisasi selalu dijalankan sebelum filter tindakan dan filter pengecualian selalu dijalankan setelah setiap jenis filter lainnya.
Filter otorisasi digunakan untuk menerapkan autentikasi dan otorisasi untuk tindakan pengontrol. Misalnya, filter Otorisasi adalah contoh filter Otorisasi.
Filter tindakan berisi logika yang dijalankan sebelum dan sesudah tindakan pengontrol dijalankan. Anda dapat menggunakan filter tindakan, misalnya, untuk memodifikasi data tampilan yang dikembalikan oleh tindakan pengontrol.
Filter hasil berisi logika yang dijalankan sebelum dan sesudah hasil tampilan dijalankan. Misalnya, Anda mungkin ingin mengubah hasil tampilan tepat sebelum tampilan dirender ke browser.
Filter pengecualian adalah jenis filter terakhir yang dijalankan. Anda dapat menggunakan filter pengecualian untuk menangani kesalahan yang dimunculkan oleh tindakan pengontrol atau hasil tindakan pengontrol Anda. Anda juga dapat menggunakan filter pengecualian untuk mencatat kesalahan.
Setiap jenis filter yang berbeda dijalankan dalam urutan tertentu. Jika Anda ingin mengontrol urutan di mana filter dengan jenis yang sama dijalankan maka Anda dapat mengatur properti Pesanan filter.
Kelas dasar untuk semua filter tindakan adalah System.Web.Mvc.FilterAttribute kelas . Jika Anda ingin menerapkan jenis filter tertentu, maka Anda perlu membuat kelas yang mewarisi dari kelas Filter dasar dan mengimplementasikan satu atau beberapa antarmuka IAuthorizationFilter, IActionFilter, IResultFilter, atau ExceptionFilter.
Kelas Base ActionFilterAttribute
Untuk memudahkan Anda menerapkan filter tindakan kustom, kerangka kerja MVC ASP.NET menyertakan kelas dasar ActionFilterAttribute . Kelas ini mengimplementasikan IActionFilter antarmuka dan IResultFilter dan mewarisi dari Filter kelas .
Terminologi di sini tidak sepenuhnya konsisten. Secara teknis, kelas yang mewarisi dari kelas ActionFilterAttribute adalah filter tindakan dan filter hasil. Namun, dalam arti longgar, filter tindakan kata digunakan untuk merujuk ke semua jenis filter dalam kerangka kerja MVC ASP.NET.
Kelas ActionFilterAttribute dasar memiliki metode berikut yang dapat Anda ambil alih:
- OnActionExecuting – Metode ini dipanggil sebelum tindakan pengontrol dijalankan.
- OnActionExecuted – Metode ini dipanggil setelah tindakan pengontrol dijalankan.
- OnResultExecuting – Metode ini dipanggil sebelum hasil tindakan pengontrol dijalankan.
- OnResultExecuted – Metode ini dipanggil setelah hasil tindakan pengontrol dijalankan.
Di bagian berikutnya, kita akan melihat bagaimana Anda dapat menerapkan masing-masing metode yang berbeda ini.
Membuat Filter Tindakan Log
Untuk mengilustrasikan bagaimana Anda dapat membuat filter tindakan kustom, kita akan membuat filter tindakan kustom yang mencatat tahapan pemrosesan tindakan pengontrol ke jendela Output Visual Studio. Kami LogActionFilter terkandung dalam Daftar 2.
Daftar 2 – ActionFilters\LogActionFilter.vb
Public Class LogActionFilter
Inherits ActionFilterAttribute
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
Log("OnActionExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
Log("OnActionExecuted", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
Log("OnResultExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
Log("OnResultExecuted", filterContext.RouteData)
End Sub
Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
Dim controllerName = routeData.Values("controller")
Dim actionName = routeData.Values("action")
Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
Debug.WriteLine(message, "Action Filter Log")
End Sub
End Class
Dalam Daftar 2, OnActionExecuting()metode , OnActionExecuted(), OnResultExecuting(), dan OnResultExecuted() semuanya memanggil Log() metode . Nama metode dan data rute saat ini diteruskan ke Log() metode . Metode Log() menulis pesan ke jendela Output Visual Studio (lihat Gambar 2).
Gambar 02: Menulis ke jendela Output Visual Studio (Klik untuk melihat gambar ukuran penuh)
Pengontrol Beranda di Daftar 3 menggambarkan bagaimana Anda dapat menerapkan filter tindakan Log ke seluruh kelas pengontrol. Setiap kali salah satu tindakan yang diekspos oleh pengontrol Beranda dipanggil – baik Index() metode atau About() metode - tahap pemrosesan tindakan dicatat ke jendela Output Visual Studio.
Daftar 3 – Controllers\HomeController.vb
<LogActionFilter()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
Function About()
Return View()
End Function
End Class
Ringkasan
Dalam tutorial ini, Anda diperkenalkan dengan ASP.NET filter tindakan MVC. Anda mempelajari tentang empat jenis filter yang berbeda: filter otorisasi, filter tindakan, filter hasil, dan filter pengecualian. Anda juga belajar tentang kelas dasar ActionFilterAttribute .
Terakhir, Anda mempelajari cara menerapkan filter tindakan sederhana. Kami membuat filter tindakan Log yang mencatat tahapan pemrosesan tindakan pengontrol ke jendela Output Visual Studio.