ASP.net Core Custom Error Page
前言
預設ASP.net Core網站如果沒有自訂錯誤頁面的話,一旦部署發行出去,程式出錯Error 500或網頁404 Not Found就會出現如上圖的畫面
本文介紹在ASP.net Core中,如果發生錯誤時,如何出現自訂錯誤畫面,其實滿簡單
實作
※本文版本為ASP.net Core 2.1
準備兩個.html檔放在wwwroot資料夾底下,兩個.html分別取名「404.html」「500.html」
404.html檔案內容↓
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>404 Not Found</title>
</head>
<body>
<h1>My 404 Not Found</h1>
</body>
</html>
500.html檔案內容↓
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>500 Server</title>
</head>
<body>
<h1>My 500 Server Error</h1>
</body>
</html>
接著自己找一個Controller寫下當程式發生未捕捉到Exception時要導頁到500.html的動作↓
public class HomeController : Controller
{
public IActionResult Error()
{
return Redirect("~/500.html"); //或http開頭的絕對URL
}
}
然後以下是本文的重點,在Startup.cs裡寫下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace StarterM
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//為了Demo測試,寫死EnvironmentName為Production
env.EnvironmentName = EnvironmentName.Production;
if (env.IsDevelopment())
{//當env.EnvironmentName為Development,程式出現詳細的錯誤訊息
app.UseDeveloperExceptionPage();
}
else
{//當env.EnvironmentName不是Development時...
app.UseExceptionHandler("/Home/Error");//未捕捉的Exception程式錯誤,要執行的Controller與Action(必須 / 開頭,否則會發生An error occurred while starting the application)
}
//當用戶輸入的網址找不到時↓
app.UseStatusCodePagesWithRedirects("~/404.html"); //或直接給http開頭的絕對URL
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
}
}
如此一來,當程式發生例外錯誤沒被try-catch捕捉到時↓
當用戶進入到不存在的網頁時↓
上述的env.EnvironmentName = EnvironmentName.Production;
此行程式碼平常可以拿掉,如果部署到正式機的話,env.EnvironmentName會自動變成Production
不過也有可能想部署到的Server上,它是測試機,專門給公司內部同仁和客戶公開測試用
目前我想得到的解法....那就把env.EnvironmentName指派EnvironmentName.Development;然後再發佈程式,錯誤訊息就會是下面這種詳細的錯誤訊息