Ich habe eine benutzerdefinierte AuthorizeAttribute
in einem Legacy-MVC5 Projekt:Detecting wenn AuthorizationAttribute manuell aufgerufen
public class AuthorizeWithLoggingAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!base.AuthorizeCore(httpContext)) {Log(FilterContext);}
}
}
Wir haben festgestellt, während durch die Protokolle suchen, dass zusätzlich zu den auf mit [AuthorizeWithLogging]
an Steuerungen angewandt werden können, es genannt wurde ausdrücklich an anderer Stelle im Code, Erzeugen von falschen Protokolle:
var filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));
foreach (var authFilter in filters.AuthorizationFilters)
{
authFilter.OnAuthorization(authContext);
if (authContext.Result != null) {return false;}
}
gibt es eine Möglichkeit (über StackTrace
oder etwas) zu sagen, ob die OnAuthorization
Methode explizit calle sein d, oder von dem Attribut aufgerufen? Die beste, die ich derzeit habe, ist Environment.StackTrace.Contains("at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters")
.
Warum finden Sie in Ihrem Code nicht alle Verweise auf die 'OnAuthorization'-Methode von' AuthorizeAttribute'? –
Welche MVC-Version verwenden Sie? –
@AmateurProgrammierer tat ich. Sie sind schwer zu entfernen. Wenn wir alles noch einmal machen könnten, würden wir es anders machen. – Arithmomaniac