eylemlerine uygulanır Özel kimlik doğrulama mantığı yapmak için bir ActionFilterAttribute kullanıyorum. Öznitelik, yalnızca kimlik doğrulama mantığımı içeren türetilmiş bir Denetleyici sınıfı üzerinde kullanılacaktır.ActionFilterAttribute - belirli bir denetleyici türü
İşte benim özel denetleyicisi sınıfından türetilmiş benim Kontrolör,, ve örnek bir nitelik:
public class MyController : CustomControllerBase
{
[CustomAuthorize(UserType = UserTypes.Admin)]
public ActionResult DoSomethingSecure()
{
return View();
}
}
İşte benim ActionFilterAttribute bir örnek:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public MyUserTypes UserType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
myUser user = ((CustomControllerBase)filterContext.Controller).User;
if(!user.isAuthenticated)
{
filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
}
}
}
oldukça uygundur.
İşte soru şu: Bu özniteliğin SADECE özel denetleyici türümdeki Eylemler'de kullanılmasını talep edebilir miyim?
AuthroizeAttribute'dan devralmadığı için eyleminiz bozuktur ve bu nedenle eylem önbelleğe alındığında çalışması garanti edilmez. Önbelleğe alma ile çalışan çözümler için http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ adresine bakın. –
Neden eylem sonucu önbelleğe alınır? –
Birisi önbelleğe alınmasını söylediği için önbelleğe alınabilirdi. Alt tipte bozuk özniteliği fark etmeden, bir üst sınıf özniteliğini bir üst sınıfa yerleştirdiğini düşünün. ASP.NET/MVC önbelleğe alma ile temelde uyumsuz olmayan bir öznitelik kullanmak çok daha iyi bir fikir. Seçenekler için yukarıdaki bağlantıya bakın. –