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.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
}
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 IAuthorizationFilterantarmuka , , IActionFilterIResultFilter, atau IExceptionFilter .
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 dasar ActionFilterAttribute 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.cs
using System;
using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1.ActionFilters
{
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", filterContext.RouteData);
}
private void Log(string methodName, RouteData routeData)
{
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
}
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.cs
using System.Web.Mvc;
using MvcApplication1.ActionFilters;
namespace MvcApplication1.Controllers
{
[LogActionFilter]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
}
}
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.