app.UseExceptionHandler(“Home / Error”)没有回到主页/错误

时间:2016-06-09 13:09:38

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我创建了一个简单的Home / Error页面,我可以直接进入,没有任何问题。它现在只返回一些静态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开发者工具中的“网络”标签,我会看到从我的“Home / TestException”操作返回的500状态会引发异常。

如果我将其切换到app.UseDeveloperExceptionPage(),该页面就可以了。任何想法为什么这不起作用?

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

以下是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"
},

4 个答案:

答案 0 :(得分:4)

app.UseStatusCodePagesWithReExecute 似乎运作良好:

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

答案 1 :(得分:1)

  

我希望被重定向到Home / Error。相反,我得到一个空白屏幕,如果我查看Chrome开发者工具中的“网络”标签,我会看到从我的“Home / TestException”操作返回的500状态会引发异常。

     

如果我将其切换到app.UseDeveloperExceptionPage(),该页面就可以了。任何想法为什么这不起作用?

我不确定为什么app.UseExceptionHandler("/Home/Error");不能正常工作 - 也许它取决于形式异常类型? - 你能举例说明你的例外吗?

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

这也可以让你在你的情况下重定向到Error页面,{0}它的错误代码 - 你可以删除它的表格地址,或者你可以在错误页面上使用它。

更多信息: MVC Core Error Handling

答案 2 :(得分:0)

这在rc1下无效。直到我将整个项目移到RC2,这一切都开始起作用了。我认为可能只是一些版本的dnx组件的版本问题(现在已经过时)。感谢大家的建议。

答案 3 :(得分:0)

我在尝试使用“Razor 页面”而不是“Razor 视图”进行错误处理时遇到了这个问题。问题是“Razor 页面”都没有工作,因为没有设置 Razor 页面的路由。

我通过在路由中添加 .MapRazorPages() 来修复它

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

                cfg.MapRazorPages();
            });