在Application_BeginRequest()期间确定Glimpse是否正在运行

Pau*_*aul 3 glimpse mvc-mini-profiler

我安装了Glimpse(Glimpse MVC4)和MiniProfiler(支持EF).

我还为Glimpse安装了MiniProfiler插件.

我有所有连线和工作.我想允许Glimpse的配置来确定MiniProfiler是否应该开始分析.也就是说,如果启用了Glimpse(通过Glimpse.axd而不是通过配置设置),我想在Application_BeginRequest()方法中调用MiniProfiler.Start().所以,像这样:

protected void Application_BeginRequest()
{
    if (Glimpse.IsRunning)
    {
        MiniProfiler.Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法确定是否启用了Glimpse?

nik*_*d23 5

从技术上讲,有一种方法,但我称之为hacky充其量.我会让你决定它是否适合你的目的.

var policyString = HttpContext.Current.Items["__GlimpseRequestRuntimePermissions"].ToString();
RuntimePolicy glimpsePolicy;
RuntimePolicy.TryParse(policyString, out glimpsePolicy);

if (!glimpsePolicy.HasFlag(RuntimePolicy.Off))
{
    MiniProfiler.Start();
}
Run Code Online (Sandbox Code Playgroud)

我称之为黑客的原因是因为虽然Glimpse可能On在请求的开头,但可能会在以后转向Off.

此行为的一个示例是,当ASP.NET开始报告不受支持的媒体类型(如图像)时,Glimpse会自动关闭.在HTTP Handler运行之前,ASP.NET无法知道媒体类型.在这种情况下,Glimpse会说它在请求开始时处于打开状态,但随后会在结束时关闭.

  • 使用MiniProfiler,您可以开始记录每个请求的时间信息,然后选择在请求结束时使用"MiniProfiler.Stop(discardResults:someValueThatKnowsIfGlimpseWasTurnedOffDuringTheRequest)"保留或销毁它;`. (2认同)