MvcMiniProfiler结果请求在Asp.Net MVC应用程序中提供404

我试图在我的Asp.Net MVC应用程序中使用MvcMiniProfiler。 我安装了最新的NuGet包,并将维基页面中的所有代码添加到Application_BeginRequest()Application_AuthenticateRequest()和我的视图中。

加载页面后,所有迷你探查器的javascript文件都被包含在内并从服务器上正确下载,但当它尝试获取结果时Chrome显示:

 GET http://localhost:59269/mini-profiler-results?id=59924d7f-98ba-40fe-9c4a-6a163f7c9b08&popup=1 404 (Not Found) 

我假设这是因为没有设置MVC的路由以允许/mini-profiler-results但是我找不到办法做到这一点。 查看Google代码页,他们的示例应用程序的Global.asax.cs文件经历了多次更改,一次使用MvcMiniProfiler.MiniProfiler.RegisterRoutes() ,第二次使用MvcMiniProfiler.MiniProfiler.Init() ,第三次什么都不做的风格。 前面提到的两个函数不存在,所以我假设它们已被逐步淘汰。

此时我不确定如何修复此错误并在我的应用程序中使用分析器。 有任何想法吗?


我的Global.Asax.cs文件如下所示:

 public class Global : System.Web.HttpApplication { protected void Application_BeginRequest() { MvcMiniProfiler.MiniProfiler.Start(); } protected void Application_AuthenticateRequest(Object sender, EventArgs e) { // Only show profiling to admins if (!Roles.IsUserInRole(Constants.AdminRole)) MvcMiniProfiler.MiniProfiler.Stop(discardResults: true); } protected void Application_Start(object sender, EventArgs e) { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } } 

现在,静态构造函数自动调用RegisterRoutes()方法(并使用适当的写锁等),当您第一次调用MiniProfiler.Start()时,应该调用该方法。 这应该将路由注入路由表。

因此,除非您在第一次触摸探查器在某个时刻明确清除路径表,否则它应该 (所有条件相同)都可以工作。

我想知道这是否是安全的事情。 例如,您运行的是哪个版本的IIS? 在某些配置(特别是IIS6)中,路径需要由服务器识别,或者您需要启用通配符。 如果是这种情况,请告诉我 – 也许我们可以实施某种后备路线到ashx或其他东西。


更新:问题是您没有在查询结束时保存结果; 有短期和长期存储,并且都提供了默认实现 – 您需要做的就是:

 protected void Application_EndRequest(object sender, EventArgs e) { MiniProfiler.Stop(discardResults: !IsAnAdmin()); } 

更新更新:您可能还需要在部分中将以下内容添加到web.config: