У меня есть обычай AuthorizeAttribute
в проекте наследие MVC5:Detecting если AuthorizationAttribute вручную называется
public class AuthorizeWithLoggingAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!base.AuthorizeCore(httpContext)) {Log(FilterContext);}
}
}
Мы заметили, глядя через журналы, что в дополнение к тому, чтобы применять к контроллерам с [AuthorizeWithLogging]
, он вызывается явно в другом месте в коде, порождающие ложные журналы:
var filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));
foreach (var authFilter in filters.AuthorizationFilters)
{
authFilter.OnAuthorization(authContext);
if (authContext.Result != null) {return false;}
}
есть ли способ сказать (через StackTrace
или что-то) ли быть явно метод OnAuthorization
Каллы d или вызван из атрибута? Лучшее, что у меня сейчас есть, - Environment.StackTrace.Contains("at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters")
.
Почему бы вам не найти все ссылки на метод 'OnAuthorization'' AuthorizeAttribute' в вашем коде? –
Какую версию MVC вы используете? –
@ AmateurProgrammer я сделал. Их трудно выбить. Если бы мы могли сделать это снова, мы бы сделали это по-другому. – Arithmomaniac