ASP.NET Core .NET 5集成MiniProfiler访问/profiler报404错误求助
咱们一步步来排查和解决你遇到的问题,核心原因大概率是SPA中间件拦截了请求,再加上一些配置细节需要调整:
调整中间件顺序,让MiniProfiler跑在SPA中间件前面
SPA应用里的UseSpaStaticFiles和UseSpa这俩中间件,会把所有没匹配到的路由都指向index.html,如果你的UseMiniProfiler()放在这些SPA中间件之后,/profiler的请求直接就被SPA截胡返回页面了。赶紧把app.UseMiniProfiler()移到SPA相关中间件之前,给你个正确的中间件顺序参考:// 正确的中间件排列顺序 app.UseHttpsRedirection(); app.UseStaticFiles(); // MiniProfiler必须放在SPA中间件之前! app.UseMiniProfiler(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); // SPA相关中间件放在最末尾 app.UseSpaStaticFiles(); app.UseSpa(spa => { // 你的SPA配置逻辑,比如React的dev server设置 });先触发MiniProfiler会话再访问/profiler
/profiler页面需要有已生成的会话数据才能显示内容,空会话情况下可能直接返回404。你得先调用一次WeatherForecastController的Get接口(比如访问/WeatherForecast),触发代码里的MiniProfiler.Current.Step逻辑生成会话,之后再去访问http://localhost:5000/profiler,就能看到会话列表了。检查路由基路径是否冲突
你设置了options.RouteBasePath = "/profiler",得确认你的应用里没有其他路由(比如API路由、SPA自定义路由)用了/profiler这个前缀,要是有冲突,就把MiniProfiler的路由改成别的,比如/mini-profiler。确认MiniProfiler服务配置的顺序
虽然不是强制要求,但把AddMiniProfiler放在AddDbContext之后,能保证EF集成的逻辑更顺畅,给你个配置参考:// 先注册DbContext services.AddDbContext<svcodecampContext>(options => { // 你的DbContext连接字符串等配置 }); // 再注册MiniProfiler并集成EF services.AddMiniProfiler(options => { options.PopupRenderPosition = StackExchange.Profiling.RenderPosition.BottomLeft; options.PopupShowTimeWithChildren = true; options.RouteBasePath = "/profiler"; }).AddEntityFramework();排除授权中间件的拦截
如果你的应用开了授权中间件(app.UseAuthorization()),得确保/profiler路径能被匿名访问。可以在MiniProfiler的配置里加授权规则,比如:services.AddMiniProfiler(options => { // 其他配置... // 开发环境允许所有访问,生产环境记得改成符合你业务的授权逻辑 options.ResultsAuthorize = _ => true; options.ResultsListAuthorize = _ => true; });
内容的提问来源于stack exchange,提问作者Peter Kellner

