一.概述
本文介紹處理 ASP.NET Core 應用中常見錯誤的一些方法。主要是關於:開發環境異常頁;非開發環境配置自定義異常處理頁;配置狀態代碼頁(沒有正文響應,http狀態400~599的)。
1.1 開發環境異常頁
要將應用配置為顯示有關異常的詳細信息的頁面,請使用開發環境異常頁。要環境設置為 Development,具體查看:asp.net core系列9環境。下面向 Startup.Configure 方法添加代碼行:
if (env.IsDevelopment())
{
//注意: 調用該方法,要放在對其捕獲異常的任何中間件前面,中間件格式Use{ xxx }(),如UseMvc();
app.UseDeveloperExceptionPage();
}
1.2 配置自定義異常處理頁
配置自定義異常處理頁,用於非 Development 環境下,下面是razor項目中的異常處理頁代碼(Pages下Error.cshtml頁面)。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/error");
}
在 MVC 應用中,不要使用 HTTP 方法特性(如 HttpGet)修飾錯誤處理程序操作方法。 顯式謂詞可阻止某些請求訪問方法。 允許匿名訪問方法,以便未經身份驗證的用戶能夠接收錯誤視圖。
//mvc中,HomeController中的Error, 添加[AllowAnonymous]
[AllowAnonymous]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
1.3配置狀態代碼頁
默認情況下,應用不會為 HTTP 狀態代碼提供豐富狀態代碼頁,例如 404 未找到。下面我們訪問一個不存在的頁面,默認頁面顯示如下:
下面提供狀態代碼頁,使用狀態代碼頁中間件,向 Startup.Configure 方法中添加。注意: 管道中請求處理中間件之前調用 UseStatusCodePages。
//請求處理中間件之前調用
app.UseStatusCodePages();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
默認情況下,狀態代碼頁中間件為常見狀態代碼(如 404)添加純文本處理程序, 如下所示:
該中間件支持多種擴展方法。 一種方法採用 Lambda 表達式:
//自定義頁面的輸出類型和文字信息及狀態碼,用於處理程序,檢查狀態代碼在400~599之間且沒有正文的響應
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/plain";
await context.HttpContext.Response.WriteAsync(
"Status code page, status code: " +
context.HttpContext.Response.StatusCode);
});
UseStatusCodePages 重載需要使用內容類型和格式字符串:
app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");
1.4 UseStatusCodePagesWithRedirects重定向
該中間件作用是: (1) 向客戶端發送“302 和狀態碼。(2)將客戶端重定向到 URL 模板中的位置。
//當沒有正文的響應時,重定向到指定頁面,{0}點位符表示請求出錯的http的狀態碼
app.UseStatusCodePagesWithRedirects("/error/{0}");
//請求處理中間件之前調用
// app.UseStatusCodePages();
下面是在razor項目中,當訪問一個不存在的頁面時http://localhost:60397/page/missingpage,地址重定向到error頁並顯示出錯的狀態碼,必要時還可以在error頁的OnGet()方法中進行業務處理。
參考文獻
官方資料:asp.net core 錯誤處理
歡迎添加個人微信號:Like若所思。
歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!
閱讀更多 懂得Core 的文章