2013-03-08 46 views
0

美好的一天!試圖解決問題。我使用的處理網站上的所有錯誤的方法(該方法在一個人的博客上發現)處理所有錯誤

的Global.asax

protected void Application_Error(object sender, EventArgs e) 
{ 
    HttpContext ctx = HttpContext.Current; 
    Exception ex = ctx.Server.GetLastError(); 
    ctx.Response.Clear(); 

    RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext; 
    IController controller = new CategoryController(); 
    var context = new ControllerContext(rc, (ControllerBase)controller); 

    var viewResult = new ViewResult(); 

    var httpException = ex as HttpException; 
    if (httpException != null) 
    { 
     switch (httpException.GetHttpCode()) 
     { 
      case 404: 
       viewResult.ViewName = "Error404"; 
       break; 

      case 500: 
       viewResult.ViewName = "Error500"; 
       break; 

      default: 
       viewResult.ViewName = "Error"; 
       break; 
     } 
    } 
    else 
    { 
     viewResult.ViewName = "Error"; 
    } 

    viewResult.ViewData.Model = new HandleErrorInfo(ex, context.RouteData.GetRequiredString("controller"), context.RouteData.GetRequiredString("action")); 
    viewResult.ExecuteResult(context); 
    ctx.Server.ClearError(); 
} 

當我在錄音室開始的項目,導致錯誤。

RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext; 

例外:

無法轉換類型 'System.Web.DefaultHttpHandler' 的對象類型 'System.Web.Mvc.MvcHandler'

一旦我停止調試(按Shift我那個代碼獲得異常+ F5)。此方法運作良好,並處理任何錯誤。但在項目開始時,導致錯誤。尋找這些主題的解決方案,但未找到此問題。請幫助。

[HandleError] 
public class CategoryController : Controller 
{ 
    // some methods 
} 
+0

小心全局變量;甚至在全球範圍內利用日誌記錄。 – Greg 2013-03-08 16:55:26

回答

1

通過使用代碼解決他的問題:

void Application_Error(object sender, EventArgs e) 
     { 
      Exception ex = Server.GetLastError(); 
      if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404) 
      { 
       Response.Redirect("~/Error/404"); 
      } 
      else 
      { 
       Response.Redirect("~/Error/Other"); 
      } 
      Server.ClearError(); 
     }