Ho un personalizzato AuthorizeAttribute
in un progetto legacy MVC5:rilevare se AuthorizationAttribute chiamato manualmente
public class AuthorizeWithLoggingAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!base.AuthorizeCore(httpContext)) {Log(FilterContext);}
}
}
Abbiamo notato mentre guardando attraverso i registri, che oltre ad essere ad applicare ai controllori con [AuthorizeWithLogging]
, veniva chiamato esplicitamente in altre parti del codice, che generano i registri spurie:
var filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));
foreach (var authFilter in filters.AuthorizationFilters)
{
authFilter.OnAuthorization(authContext);
if (authContext.Result != null) {return false;}
}
c'è un modo di dire (via StackTrace
o qualcosa) se il metodo OnAuthorization
è essere esplicitamente calle d, o chiamato dall'attributo? Il migliore che attualmente ho è Environment.StackTrace.Contains("at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters")
.
Perché non trovi tutti i riferimenti al metodo "OnAuthorization' di" AuthorizeAttribute "nel tuo codice? –
Quale versione MVC stai usando? –
@AmateurProgrammer che ho fatto. Sono difficili da rimuovere. Se potessimo fare tutto da capo, lo faremmo diversamente. – Arithmomaniac