2013-03-08 2 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

ответ

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(); 
     } 
Смежные вопросы