asp.net MVC3上的自定义错误页面

asp.net MVC3上的自定义错误页面

我正在开发一个MVC3基础网站,我正在寻找一个处理错误的解决方案,并为每种错误渲染自定义视图。因此,假设我有一个“错误”控制器,其主要操作是“索引”(通用错误页面),并且此控制器将针对用户可能出现的错误(如“Handle500”或“HandleActionNotFound”)执行更多操作。

因此,网站上可能发生的每个错误都可能由此“错误”控制器处理(例如:“Controller”或“Action”未找到,500,404,dbException等)。

我使用Sitemap文件来定义网站路径(而不是路由)。

这个问题已经回答了,这是对Gweebz的回复

我的最终applicaiton_error方法如下:

protected void Application_Error() {//while my project is running in debug modeif (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");
    }}}


慕尼黑的夜晚无繁华
浏览 531回答 3
3回答

一只萌萌小番薯

这是我如何处理自定义错误的示例。我定义了一个ErrorsController处理不同HTTP错误的动作: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_Errorin 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);}

呼唤远方

您也可以在Web.Config文件中执行此操作。这是一个适用于IIS 7.5的示例。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<system.webServer> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<httpErrors&nbsp;errorMode="DetailedLocalOnly"&nbsp;defaultResponseMode="File"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="502"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="501"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="412"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="406"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="405"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="404"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="403"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="401"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<remove&nbsp;statusCode="500"&nbsp;subStatusCode="-1"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="500"&nbsp;path="/notfound.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="401"&nbsp;prefixLanguageFilePath=""&nbsp;path="/500.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="403"&nbsp;prefixLanguageFilePath=""&nbsp;path="/403.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="404"&nbsp;prefixLanguageFilePath=""&nbsp;path="/404.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="405"&nbsp;prefixLanguageFilePath=""&nbsp;path="/405.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="406"&nbsp;prefixLanguageFilePath=""&nbsp;path="/406.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="412"&nbsp;prefixLanguageFilePath=""&nbsp;path="/412.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="501"&nbsp;prefixLanguageFilePath=""&nbsp;path="/501.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<error&nbsp;statusCode="502"&nbsp;prefixLanguageFilePath=""&nbsp;path="/genericerror.html"&nbsp;responseMode="ExecuteURL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</httpErrors></system.webServer>
打开App,查看更多内容
随时随地看视频慕课网APP