1

У меня возникли проблемы с перенаправлением на контроллер ошибок при возникновении ошибки приложения в Global.asax.Перенаправление на страницу ошибки Не удалось выполнить ошибку приложения в Global.asax (MVC)

Вот мой RouteCollection

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

    routes.MapRoute(
     "DefaultError", 
     "{controller}/{action}/{id}", 
     new { controller = "HndlError", action = "AllErrors", id = UrlParameter.Optional } 
     ); 

И Мои Global.asaxApplication_Error имеет этот

   this.Context.Response.Clear(); 
       this.Context.ClearError(); 
       //this.Response.Redirect("~/HndlError/AllErrors") // This one Works !!! 


       this.Response.RedirectToRoute(new { controller = "HndlError", 
action = "AllErrors", id = ErrorMessage }); // This does not Work 

       this.Response.End(); 

My Controller Action действительно получить удар при использовании Response.Redirect, но возвращает пустую страницу с RedirectToRoute. Сделал еще несколько поисков, а затем наткнулся на эту GEM!

Beware of ResponseRedirectToRoute in MVC 3

Это значит, что он не будет работать в MVC3 или я что-то отсутствует? Пожалуйста помоги.

благодаря

+0

Remove 'this.Response.End();' от конца 'Application_Error'. – Mairaj

+0

Уже пробовал, что. – Deb

ответ

2

Попробуйте следующее:

protected void Application_Error(object sender, EventArgs e) 
{ 
    HttpContext ctx = HttpContext.Current; 
    ctx.Response.Clear(); 
    RequestContext rc =((MvcHandler)ctx.CurrentHandler).RequestContext; 
    rc.RouteData.Values["action"] = "AllErrors"; 

    rc.RouteData.Values["controller"] = "HndlError"; 
    rc.RouteData.Values["id"] = ErrorMessage ; 

    IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); 
    IController controller = factory.CreateController(rc, "HndlError"); 
    controller.Execute(rc); 
    ctx.Server.ClearError(); 
}