2017-06-05 42 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

相關問題