ASP.NET MVC 3上的自定義錯誤頁我正在開發(fā)一個MVC 3基礎(chǔ)網(wǎng)站,我正在尋找一個處理錯誤的解決方案,并為每種錯誤呈現(xiàn)自定義視圖。因此,假設(shè)我有一個“Error”Controller,其中他的主要操作是“Index”(泛型錯誤頁),并且對于用戶可能出現(xiàn)的錯誤,這個控制器還會有幾個操作,比如“Handle 500”或“HandleActionNotFound”。因此,網(wǎng)站上可能發(fā)生的每一個錯誤都可能由這個“Error”Controller(例如:“Controller”或“Action”未找到、500、404、dbException等)處理。我使用站點地圖文件來定義網(wǎng)站路徑(而不是路由)。這個問題已經(jīng)回答了,這是對Gweebz的答復(fù)。我的最后一個應(yīng)用程序錯誤方法如下:protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false")){
Log.Logger.Error("unhandled exception: ", Server.GetLastError());}else{
try
{
var exception = Server.GetLastError();
Log.Logger.Error("unhandled exception: ", exception);
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
catch (Exception e)
{
//if Error controller failed for same reason, we will display static HTML error page
Log.Logger.Fatal("failed to display error page, fallback to HTML error: ", e);
Response.TransmitFile("~/error.html");
}}}
3 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
ErrorsController
public class ErrorsController : Controller{ public ActionResult General(Exception exception) { return Content("General failure", "text/plain"); } public ActionResult Http404() { return Content("Not found", "text/plain"); } public ActionResult Http403() { return Content("Forbidden", "text/plain"); }}
Application_Error
Global.asax
protected void Application_Error(){ var exception = Server.GetLastError(); var httpException = exception as HttpException; Response.Clear(); Server.ClearError(); var routeData = new RouteData(); routeData.Values["controller"] = "Errors"; routeData.Values["action"] = "General"; routeData.Values["exception"] = exception; Response.StatusCode = 500; if (httpException != null) { Response.StatusCode = httpException.GetHttpCode(); switch (Response.StatusCode) { case 403: routeData.Values["action"] = "Http403"; break; case 404: routeData.Values["action"] = "Http404"; break; } } IController errorsController = new ErrorsController(); var rc = new RequestContext(new HttpContextWrapper(Context), routeData); errorsController.Execute(rc);}

慕田峪9158850
TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊
<system.webServer> <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File"> <remove statusCode="502" subStatusCode="-1" /> <remove statusCode="501" subStatusCode="-1" /> <remove statusCode="412" subStatusCode="-1" /> <remove statusCode="406" subStatusCode="-1" /> <remove statusCode="405" subStatusCode="-1" /> <remove statusCode="404" subStatusCode="-1" /> <remove statusCode="403" subStatusCode="-1" /> <remove statusCode="401" subStatusCode="-1" /> <remove statusCode="500" subStatusCode="-1" /> <error statusCode="500" path="/notfound.html" responseMode="ExecuteURL" /> <error statusCode="401" prefixLanguageFilePath="" path="/500.html" responseMode="ExecuteURL" /> <error statusCode="403" prefixLanguageFilePath="" path="/403.html" responseMode="ExecuteURL" /> <error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" /> <error statusCode="405" prefixLanguageFilePath="" path="/405.html" responseMode="ExecuteURL" /> <error statusCode="406" prefixLanguageFilePath="" path="/406.html" responseMode="ExecuteURL" /> <error statusCode="412" prefixLanguageFilePath="" path="/412.html" responseMode="ExecuteURL" /> <error statusCode="501" prefixLanguageFilePath="" path="/501.html" responseMode="ExecuteURL" /> <error statusCode="502" prefixLanguageFilePath="" path="/genericerror.html" responseMode="ExecuteURL" /> </httpErrors></system.webServer>
- 3 回答
- 0 關(guān)注
- 642 瀏覽
添加回答
舉報
0/150
提交
取消