2017-06-05 118 views
2

当ASP.NET Core应用程序的启动阶段出现异常时,是否有方法显示自定义错误页面?例如,如果在Startup类的任何方法(即Configure,ConfigureServices,Startup.Ctor等)中发生异常(db已关闭等)?
我觉得用下面的代码是不是要帮我在启动时显示自定义错误页面

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

为中间件pipline尚未建立。所以行

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

不作为结果执行。
如果在此阶段发生错误,是否有方法显示自定义错误页面?

感谢
ashilon

+0

好吧,不知道那个。谢谢 – ashilon

回答

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(); 
} 
+0

非常好。很有帮助。谢谢亨克。 – ashilon

-2

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

+1

我不认为这解决了这个问题。我认为Ashilon指的是一个.core相当于'Globals.asax'来处理错误,或者像在MVC中一样重写'OnException'? –

+0

对不起奥拉西奥,但丹尼尔希罗科克是对的。我在这里讨论ASP.NET Core,就像Daniel提到的,类似于MVC中的Gloabl.asax和OnException。只是所描述的情景在应用程序启动过程的早期发生,所以中间件基础尚未到位。不管怎么说,多谢拉。 – ashilon

+0

这只是对答案的模糊描述,而不是答案。请阅读[我如何写出一个好的答案?](https://stackoverflow.com/help/how-to-answer) – Liam

相关问题