ASP.NET MVC एप्लिकेशन में फिल्टर्स को तीन स्तरों पर लागू किया जा सकता है:
- एक्शन मेथड लेवल
- कंट्रोलर लेवल
- ग्लोबल लेवल
1. एक्शन मेथड लेवल
एक्शन मेथड लेवल पर लागू फिल्टर्स केवल उस विशेष एक्शन मेथड के लिए काम करेंगे।
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
public class HomeController : Controller
{
// केवल Index एक्शन के लिए Authorize फिल्टर
[Authorize]
public string Index()
{
return "Index Invoked";
}
// इस एक्शन पर कोई फिल्टर नहीं
public string About()
{
return "About Invoked";
}
}
}
2. कंट्रोलर लेवल
कंट्रोलर लेवल फिल्टर्स उस कंट्रोलर के सभी एक्शन मेथड्स पर लागू होते हैं। निम्नलिखित फिल्टर HomeController के सभी एक्शन मेथड्स पर लागू होंगे, लेकिन अन्य कंट्रोलर्स पर नहीं।
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
// इस कंट्रोलर के सभी एक्शन्स के लिए Authorize फिल्टर
[Authorize]
public class HomeController : Controller
{
public string Index1()
{
return "Index1 Invoked";
}
public string Index2()
{
return "Index2 Invoked";
}
}
// इस कंट्रोलर पर Authorize नहीं
public class PublicController : Controller
{
public string Index() { return "Public"; }
}
}
3. ग्लोबल लेवल
ग्लोबल लेवल फिल्टर्स Global.asax.cs फाइल के Application_Start इवेंट में डिफ़ॉल्ट FilterConfig.RegisterGlobalFilters() मेथड का उपयोग करके प्रदान किए जाते हैं। ग्लोबल फिल्टर्स एप्लिकेशन के सभी कंट्रोलर्स और एक्शन मेथड्स पर लागू होंगे।
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// सभी अनहैंडल्ड एक्सेप्शन्स के लिए एरर हैंडलिंग
filters.Add(new HandleErrorAttribute());
// पूरे एप्लिकेशन के लिए ऑथराइजेशन आवश्यक
filters.Add(new AuthorizeAttribute());
}
}
फिल्टर एक्जीक्यूशन ऑर्डर
जब एकाधिक लेवल पर फिल्टर्स लागू होते हैं, तो वे इस क्रम में चलते हैं:
- ग्लोबल फिल्टर्स (सबसे पहले)
- कंट्रोलर फिल्टर्स
- एक्शन फिल्टर्स (अंत में)
प्रत्येक लेवल के भीतर, फिल्टर्स उस क्रम में चलते हैं जिसमें वे जोड़े गए थे।
फिल्टर प्रकार और उनके लागू होने के स्तर
| फिल्टर प्रकार | इंटरफेस | सामान्य स्तर | उदाहरण |
|---|---|---|---|
| Authorization | IAuthorizationFilter | ग्लोबल, कंट्रोलर, एक्शन | [Authorize], [RequireHttps] |
| Action | IActionFilter | कंट्रोलर, एक्शन | [ValidateAntiForgeryToken] |
| Result | IResultFilter | कंट्रोलर, एक्शन | [OutputCache] |
| Exception | IExceptionFilter | ग्लोबल, कंट्रोलर, एक्शन | [HandleError] |
एक्शन लेवल पर कंट्रोलर/ग्लोबल फिल्टर को ओवरराइड करना
[Authorize] // ग्लोबल/कंट्रोलर लेवल
public class AdminController : Controller
{
[AllowAnonymous] // इस एक्शन के लिए ऑथराइजेशन ओवरराइड करें
public ActionResult Login()
{
return View();
}
[OverrideAuthorization]
[Authorize(Roles = "SuperAdmin")] // अलग ऑथराइजेशन नियम
public ActionResult SuperAdminOnly()
{
return View();
}
}
ASP.NET Core में फिल्टर्स
ASP.NET Core में, फिल्टर्स को निम्न तरीकों से लागू किया जाता है:
// ग्लोबल (Program.cs / Startup.cs)
builder.Services.AddControllers(options =>
{
options.Filters.Add();
options.Filters.Add(); // ग्लोबल ऑथराइजेशन
});
// कंट्रोलर लेवल
[ServiceFilter(typeof(LogActionFilter))]
public class HomeController : Controller { ... }
// एक्शन लेवल
[TypeFilter(typeof(CustomActionFilter))]
public IActionResult Index() { ... }
// एट्रिब्यूट के रूप में (सबसे आम)
[Authorize]
[ResponseCache(Duration = 60)]
public IActionResult Get() { ... }
सर्वोत्तम अभ्यास
- क्रॉस-कटिंग कंसर्न्स (लॉगिंग, ऑथ, एरर हैंडलिंग) के लिए ग्लोबल फिल्टर्स का उपयोग करें
- कंट्रोलर-वाइड पॉलिसीज (एरिया-विशिष्ट ऑथ) के लिए कंट्रोलर फिल्टर्स का उपयोग करें
- विशिष्ट व्यवहार (विशिष्ट कैशिंग, वैलिडेशन) के लिए एक्शन फिल्टर्स का उपयोग करें
Override*एट्रिब्यूट्स का उपयोग करके निचले स्तर पर फिल्टर्स को चुनिंदा रूप से ओवरराइड करें- ग्लोबल फिल्टर्स में
HandleErrorAttributeहमेशा रखें अनहैंडल्ड एक्सेप्शन्स के लिए