ActionFilterAttribute, gelten für Aktionen eines bestimmten controller-Typ

Ich bin mit einem ActionFilterAttribute zu tun, die benutzerdefinierte Authentifizierung Logik. Das Attribut wird nur verwendet werden, auf einer abgeleiteten Controller-Klasse, die enthält meine Authentifizierung Logik.

Hier mein Controller, abgeleitet von meinem custom controller-Klasse, und eine Beispiel-Eigenschaft:

public class MyController : CustomControllerBase
{

   [CustomAuthorize(UserType = UserTypes.Admin)]
   public ActionResult DoSomethingSecure()
   {
      return View();
   }

}

Hier ist ein Beispiel meiner ActionFilterAttribute:

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;
      }
   }
}

Funktioniert Super.

Hier ist die Frage: Kann ich verlangen, dass dieses Attribut NUR verwendet werden, auf Aktionen, auf meiner eigenen controller-Typ?

Ihr Attribut ist gebrochen, weil es keine Erben aus AuthroizeAttribute und somit ist nicht garantiert ausgeführt, wenn die Aktion gespeichert ist. Siehe blogs.teamb.com/craigstuntz/2009/09/09/38390, die Lösungen für die Arbeit mit caching.
Warum sollte das Ergebnis einer Aktion zwischengespeichert werden?
Es würde zwischengespeichert werden, weil jemand gesagt, es zwischengespeichert werden. Stell dir vor, jemand legt die Cache-Attribut in einer parent-Klasse, nicht zu bemerken, die gebrochen Attribut des Subtyps. Es ist eine weitaus bessere Idee, ein Attribut verwenden, das ist nicht grundsätzlich unvereinbar mit ASP.NET/MVC -caching. Siehe den link oben für weitere Optionen.
Guten Fang. Ich nicht wirklich ein Blick auf die action-filter selbst. Er ist richtig, wenn Sie schreiben Sie Ihre eigene Autorisierungs-action filter, die Sie wirklich Erben sollte aus AuthorizeAttribute. Dann können Sie das überschreiben der AuthorizeCore() protected-Methode.
Muss einige Klarstellungen zu diesem Thema hier stackoverflow.com/questions/1441799/...

InformationsquelleAutor Peter J | 2009-09-17

Schreibe einen Kommentar