Я использую MVC Mini Profiler, и я показываю профилировщик только для аутентифицированных пользователей, которые находятся в роли «Profiler». В примере доставки в MiniProfiler.cs использовался метод AuthenticateRequest, чтобы определить, следует ли прекратить профилирование, но я переключил свой на использование PostAuthorizeRequest (после прочтения this question), чтобы я мог получить доступ к методам IPrincipal и IsInRole. Могу ли я просто запустить профилировщик в методе PostAuthorizeRequest, или я должен продолжать останавливать и отбрасывать результаты в PostAuthorizeRequest? Какие накладные расходы связаны с запуском и остановкой профилировщика для каждого запроса?
Текущий код:
public void Init(HttpApplication context)
{
context.BeginRequest += (sender, e) =>
{
MiniProfiler.Start();
};
context.PostAuthorizeRequest += (sender, e) =>
{
var user = ((HttpApplication)sender).Context.User;
if (user == null || !user.Identity.IsAuthenticated || !user.IsInRole("Profiler"))
{
MvcMiniProfiler.MiniProfiler.Stop(discardResults: true);
}
};
context.EndRequest += (sender, e) =>
{
MiniProfiler.Stop();
};
}
Предлагаемый код:
public void Init(HttpApplication context)
{
context.PostAuthorizeRequest += (sender, e) =>
{
var user = ((HttpApplication)sender).Context.User;
if (user != null && user.Identity.IsAuthenticated && user.IsInRole("Profiler"))
{
MiniProfiler.Start();
}
};
context.EndRequest += (sender, e) =>
{
MiniProfiler.Stop();
};
}