使用 MiniProfiler 时如何从分析中删除特定的 URL
How to remove specific URL's from profiling when using MiniProfiler
有时在使用 miniprofiler 时,会有一些您不关心的请求。就我而言,我不太关心信号器、umbraco ping 以及当我想知道用户是否空闲时发出的一些请求。
为了避免 miniprofiler 在这些类型的请求上使用能量(并为这些类型的请求提供结果),我在我的 global.asax.cs 文件中添加了以下代码:
protected void Application_BeginRequest()
{
if (
(Request.IsLocal || Request.UserHostAddress == "37.49.143.197")
&& !(Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
)
{
MiniProfiler.Start();
}
}
看到我仍然收到包含给定字符串的 URL 的结果,我稍后在 Application Life Cycle 中进行了此检查以尝试删除不需要的结果我可以看到我还有。
protected void Application_ProcessRequest()
{
if (Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
{
MiniProfiler.Stop(discardResults: true);
}
}
但即使我这样做了,我仍然收到不想要的结果。有谁知道这是怎么回事,我在这里做错了什么?
备注
应该注意的是,因为我使用 Umbraco 作为我的基础,所以我使用 MiniProfiler 2.1.0 并且我开始我的 Global.asax.cs 文件是这样的:
public class MvcApplication : UmbracoApplication
{
protected override void OnApplicationStarted(object sender, EventArgs e)
{
// Setup profiler for Controllers via a Global ActionFilter
GlobalFilters.Filters.Add(new ProfilingActionFilter());
// initialize automatic view profiling
var copy = ViewEngines.Engines.ToList();
ViewEngines.Engines.Clear();
foreach (var item in copy)
{
ViewEngines.Engines.Add(new ProfilingViewEngine(item));
}
...
您尝试过使用 IgnoredPaths
吗?
protected void Application_Start()
{
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
ignored.Add("/signalr/");
ignored.Add("/idle/verify");
ignored.Add("/idle/interaction");
ignored.Add("/umbraco/ping");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
}
我认为这可行的原因是 BeginRequest
和 EndRequest
事件不会针对静态资源触发。
我的理论是您的某些请求确实是针对静态内容的,因此您所描述的事件不会触发。
使用您的 Umbraco 结构,代码将如下所示:
protected override void OnApplicationStarted(object sender, EventArgs e)
{
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
ignored.Add("/signalr/");
ignored.Add("/idle/verify");
ignored.Add("/idle/interaction");
ignored.Add("/umbraco/ping");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
// Setup profiler for Controllers via a Global ActionFilter
GlobalFilters.Filters.Add(new ProfilingActionFilter());
// initialize automatic view profiling
var copy = ViewEngines.Engines.ToList();
ViewEngines.Engines.Clear();
foreach (var item in copy)
{
ViewEngines.Engines.Add(new ProfilingViewEngine(item));
}
}
有时在使用 miniprofiler 时,会有一些您不关心的请求。就我而言,我不太关心信号器、umbraco ping 以及当我想知道用户是否空闲时发出的一些请求。
为了避免 miniprofiler 在这些类型的请求上使用能量(并为这些类型的请求提供结果),我在我的 global.asax.cs 文件中添加了以下代码:
protected void Application_BeginRequest()
{
if (
(Request.IsLocal || Request.UserHostAddress == "37.49.143.197")
&& !(Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
)
{
MiniProfiler.Start();
}
}
看到我仍然收到包含给定字符串的 URL 的结果,我稍后在 Application Life Cycle 中进行了此检查以尝试删除不需要的结果我可以看到我还有。
protected void Application_ProcessRequest()
{
if (Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
{
MiniProfiler.Stop(discardResults: true);
}
}
但即使我这样做了,我仍然收到不想要的结果。有谁知道这是怎么回事,我在这里做错了什么?
备注
应该注意的是,因为我使用 Umbraco 作为我的基础,所以我使用 MiniProfiler 2.1.0 并且我开始我的 Global.asax.cs 文件是这样的:
public class MvcApplication : UmbracoApplication
{
protected override void OnApplicationStarted(object sender, EventArgs e)
{
// Setup profiler for Controllers via a Global ActionFilter
GlobalFilters.Filters.Add(new ProfilingActionFilter());
// initialize automatic view profiling
var copy = ViewEngines.Engines.ToList();
ViewEngines.Engines.Clear();
foreach (var item in copy)
{
ViewEngines.Engines.Add(new ProfilingViewEngine(item));
}
...
您尝试过使用 IgnoredPaths
吗?
protected void Application_Start()
{
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
ignored.Add("/signalr/");
ignored.Add("/idle/verify");
ignored.Add("/idle/interaction");
ignored.Add("/umbraco/ping");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
}
我认为这可行的原因是 BeginRequest
和 EndRequest
事件不会针对静态资源触发。
我的理论是您的某些请求确实是针对静态内容的,因此您所描述的事件不会触发。
使用您的 Umbraco 结构,代码将如下所示:
protected override void OnApplicationStarted(object sender, EventArgs e)
{
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
ignored.Add("/signalr/");
ignored.Add("/idle/verify");
ignored.Add("/idle/interaction");
ignored.Add("/umbraco/ping");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
// Setup profiler for Controllers via a Global ActionFilter
GlobalFilters.Filters.Add(new ProfilingActionFilter());
// initialize automatic view profiling
var copy = ViewEngines.Engines.ToList();
ViewEngines.Engines.Clear();
foreach (var item in copy)
{
ViewEngines.Engines.Add(new ProfilingViewEngine(item));
}
}