關於錯誤處理
try…catch語句,有一定侷限性
- 一般適合語句的錯誤處理
- 不適合頁面不存在等問題的處理
錯誤處理配置
1. Web.config錯誤處理典型配置
在system.web節點中添加配置
<customErrors defaultRedirect="~/ErrorPage.html" mode="RemoteOnly">
<error statusCode="404" redirect="~/NonFound.html"/>
</customErrors>
defaultRedirect:發生錯誤時,瀏覽器重定向到的URL
mode:On表示啓動自定義錯誤,Off表示禁用自定義錯誤,RemoteOnly向遠程客戶端顯示自定義錯誤,並且向本地主機顯示ASP.NET錯誤
statusCode:Http中特定的錯誤狀態碼
redirect:發生該錯誤狀態碼時重定向的頁面
2.使用HandleError處理錯誤
Web.config配置的侷限性
- 針對整個網站點的錯誤,配置錯誤顯示頁面,但是這個信息顯示一般比較模糊
- 如果針對某種類型的控制器,甚至動作方法,顯示更具體的信息,使用Web.config方式不合適
- 使用try catch也不合適(業務代碼和錯誤代碼混編)
HandleError特性:針對動作方法更方便的錯誤顯示方式
[HttpPost]
[HandleError( ExceptionType =typeof(System.Exception),View ="Error")]
public ActionResult GetUserInfor(int Id)
{
UserServer server = new UserServer();
UserInfor user = server.GetUserDetail(Id);
ViewBag.User = user;
return View();
}
ExceptionType:捕獲異常的類型
View:特定的Error視圖
- 在控制器中添加特性
- Error視圖:創建當前控制器對應的View文件夾中或在Shared文件夾中
- 應用次特性後,Web.Config中定義的錯誤處理配置將失效
在Error視圖中可以實現錯誤的詳細信息
原因是:在發生錯誤時,HandleError會將異常信息封裝成一個HandleErrorInfor對象,然後傳遞給Error視圖
常見的錯誤狀態碼
404:表示未找到文件
403:表示禁止訪問
500:內部服務器錯誤
[https://www.cnblogs.com/daiyacheng1991/p/11411511.html]:
狀態碼 | 類別 | 原因 |
---|---|---|
1xx | Informational(信息性狀態碼) | 接收的請求正在處理 |
2xx | Success(成功狀態碼) | 請求正常處理完畢 |
3xx | Redirection(重定向狀態碼) | 需要進行附加操作以完成請求 |
4xx | Client Error(客戶端錯誤狀態碼) | 服務器無法處理請求 |
5xx | Server Error(服務器錯誤狀態碼) | 服務器處理請求錯誤 |