原文地址:http://www.chuchur.com/asp-net-mvc4-404/
定義404 方法當然有很多種。不同的方法所展現的形式也不一樣,用戶所體驗也不一樣。以下提供2兩種
方法一:
1. 在web.config 中找到節點<system.web>中啟用404配置
<customErrors defaultRedirect="~/Error" mode="On" redirectMode="ResponseRedirect"> <error redirect="/Error" statusCode="404" /> </customErrors>
2.定義一個 controllers Error(這個隨你) ,在action中如下定義
public ActionResult Index() { Response.Status = "404 Not Found"; Response.StatusCode = 404; return View(); }
這種方式 默認為給你的url加上 ?aspxerrorpath=/ eg:http://localhost/Error??aspxerrorpath=/123456 故不推薦試用
方法二:
打開 Global.asax 文件 定義錯誤轉向地址(controller/action)
protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404) { Response.Redirect("/Error"); } }
注意事項:在開發時候,我們經常會在 Global.asax 中的 Application_Error 方法中使用 Response.Redirect 方法跳轉到自定義錯誤頁,但有時候(特別是當站點部署到IIS后)Application_Error 方法中使用 Response.Redirect 方法會失效,當發生異常錯誤后還是顯示的默認錯誤黃頁。其根本原因是盡管我們在 Application_Error 方法中使用了 Response.Redirect 方法,但是當系統發生異常錯誤后 Asp.Net 認為異常並沒有被處理,所以不會跳轉到 Application_Error 方法中 Response.Redirect 指向的頁面,最終還是會跳轉到默認錯誤黃頁。解決這個問題的辦法很簡單就是在 Application_Error 方法中使用 Response.Redirect 做跳轉前,先調用 Server.ClearError() 方法告訴系統發生的異常錯誤已經被處理了,這樣再調用 Response.Redirect 方法系統就會跳轉到自定義錯誤頁面了。