【问题标题】:Displaying custom error page at startup在启动时显示自定义错误页面
【发布时间】:2017-11-05 23:36:55
【问题描述】:

在 ASP.NET Core 应用程序的启动阶段发生异常时,是否可以显示自定义错误页面?例如,如果 Startup 类的任何方法(即 Configure、ConfigureServices、Startup.Ctor 等)发生异常(db 已关闭等)?
我认为使用以下代码对我没有帮助

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

因为尚未构建中间件管道。所以这条线

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

因此不会被执行。
如果在这个阶段发生错误,有没有办法显示自定义错误页面?

谢谢
阿什隆

【问题讨论】:

  • 好的,不知道。谢谢

标签: c# asp.net-core


【解决方案1】:

Configure 方法中,您正在配置HTTP 管道以处理请求。由于您的应用程序启动时没有请求,因此管道永远不会执行。事实上,正如您所提到的,在您实际配置管道时可能会发生异常。

托管层提供了一种捕获启动错误并显示一个不错的错误页面的方法。您可以在IWebHostBuilder 接口上使用CaptureStartupErrors(true)。这是您配置应用程序的托管层的地方,通常位于Pogram.cs。例如:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .CaptureStartupErrors(captureStartupErrors: true) // Add this line
        .Build();

    host.Run();
}

【讨论】:

  • 优秀。非常有帮助。谢谢亨克。
  • @henk-mollema 您提到显示启动错误的自定义错误页面,建议的指定方法是什么以避免默认值:“启动应用程序时发生错误”?它是否也在主机配置中定义?
  • @TallMcPaul 我也有同样的问题 =(
【解决方案2】:

对于一个简单的方法,您可以有一个包含 alert("your error message") 的脚本块。如果您希望将弹出窗口的样式设置为网站的其余部分,那么您可以将错误消息呈现为 div 元素并使用 jQuery 对话框将其显示为页面中的模式对话框,然后您只需将其放入您的代码:D,希望对您有所帮助!

【讨论】:

  • 我认为这不能解决问题。我认为 Ashilon 指的是与 Globals.asax 等效的 .core 来处理错误,或者像在 MVC 中那样覆盖 OnException
  • 对不起,Horacio,但 Daniel Shillocock 是对的。我在这里谈论的是 ASP.NET Core,就像 Daniel 提到的那样,类似于 MVC 中的 Gloabl.asax 和 OnException。只是描述的场景发生在应用程序启动过程的早期,所以中间件基础设施还没有到位。无论如何,谢谢。
  • 这只是对答案的模糊描述,不是答案。请阅读How do I write a good answer?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
相关资源
最近更新 更多