app.UseExceptionHandler("Home/Error") 不会 Home/Error

app.UseExceptionHandler("Home/Error") not going to Home/Error

我创建了一个简单的 Home/Error 页面,我可以毫无问题地直接访问它。现在只是 returns 一些静态的 HTML。当我将 Startup.cs 更改为:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {

            app.UseBrowserLink();
            //app.UseDeveloperExceptionPage();
            app.UseExceptionHandler("/Home/Error");

        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseIISPlatformHandler();
        app.UseSession();
        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

我希望被重定向到 Home/Error。相反,我得到一个空白屏幕,如果我查看 Chrome 开发人员工具中的 "Network" 选项卡,我会看到从我的 "Home/TestException" 操作返回的 500 状态会引发异常。

如果我将其切换为 app.UseDeveloperExceptionPage(),该页面就会正常显示。知道为什么这不起作用吗?

我正在使用 .Net Core 1.0.0-rc1-update1。

"dependencies" 来自 Project.json:

"dependencies": {
  "AutoMapper": "4.2.1",
  "Dapper": "1.42.0",
  "Microsoft.AspNet.DataProtection": "1.0.0-rc1-final",
  "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
  "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc1-final",
  "Microsoft.AspNet.Identity.EntityFramework": "2.2.1",
  "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
  "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
  "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.AspNet.Session": "1.0.0-rc1-final",
  "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
  "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
  "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
  "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
  "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
  "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
  "Newtonsoft.Json": "8.0.3",
  "Oracle.ManagedDataAccess": "12.1.24160419",
  "System.Net.Http": "4.0.0"
},

I would expect to get redirected to Home/Error. Instead I am getting a blank screen and if I look at the "Network" tab in Chrome Developer tools, I see a 500 Status returned from my "Home/TestException" action which throws an exception.

If I switch it to app.UseDeveloperExceptionPage(), that page comes up just fine. Any ideas why this is not working?

我不确定为什么 app.UseExceptionHandler("/Home/Error"); 不起作用 - 也许这取决于异常类型? - 你能给我们举个例外的例子吗?

作为临时(或非临时)解决方案,您还可以额外使用:app.UseStatusCodePagesWithRedirects("/Home/Code/{0}");

这也会让您重定向到您的案例中的 Error 页面,并且 {0} 它是错误代码 - 您可以从地址中删除它,也可以在错误页面上使用它。

更多信息: MVC Core Error Handling

这在 rc1 下不起作用。直到我将整个项目移动到 RC2 之后,这一切才开始起作用。我认为可能只是某些版本的 dnx 组件(现在已过时)的版本控制问题。谢谢大家的建议。

app.UseStatusCodePagesWithReExecute 似乎效果不错:

 if (env.IsDevelopment())
 {
     app.UseDeveloperExceptionPage();
     app.UseDatabaseErrorPage();
     app.UseBrowserLink();
 }
 else
 {
     app.UseStatusCodePagesWithReExecute("/Home/Error");
 }

我 运行 在尝试使用“Razor page”而不是“Razor view[=17=”时遇到了这个问题]",进行错误处理。问题是 none 的“Razor 页面”正在运行,因为未设置 Razor 页面的路由。

我通过将 .MapRazorPages() 添加到我的路由来修复它

app.UseEndpoints(cfg =>
            {
                cfg.MapControllerRoute("Fallback",
                    "{controller}/{action}/{id?}",
                    new { controller = "App", action = "Index" }
                    );

                cfg.MapRazorPages();
            });