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: