2011-07-15 11 views
12

próbuję pokazać stronę błędu, gdy użytkownik przesyła plik, który jest ponad limit (patrz Catching "Maximum request length exceeded")Czy mogę przekierować z pliku global.asax do działania kontrolera?

w global.asax Chcę przekierować do działania kontrolera, więc coś thisbut nie robi pracy:

private void Application_Error(object sender, EventArgs e) 
{ 
    if (GlobalHelper.IsMaxRequestExceededEexception(this.Server.GetLastError())) 
    { 
     this.Server.ClearError(); 
     return RedirectToAction("Home","Errorpage"); 
    } 
} 

Odpowiedz

23

Spróbuj tak:

protected void Application_Error() 
{ 
    var exception = Server.GetLastError(); 
    // TODO: Log the exception or something 
    Response.Clear(); 
    Server.ClearError(); 

    var routeData = new RouteData(); 
    routeData.Values["controller"] = "Home"; 
    routeData.Values["action"] = "ErrorPage"; 
    Response.StatusCode = 500; 
    IController controller = new HomeController(); 
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
    controller.Execute(rc); 
} 
+0

Używam powyższy kod w session_start(). Używam go podczas przekierowywania na stronę authenticationfalure.aspx, gdy uwierzytelnianie nie powiedzie się. Ale strona główna wraz ze stroną niepowodzenia przychodzą tak, jak się da. jak rozwiązać ten problem? –

+0

@Darin Dimitrov Jak mogę przekazać parametr do metody akcji. Chcę jakoś przekazać zmienną "wyjątku". – mathinvalidnik

+1

@mathinvalidnik, można banalnie łatwo przekazać wyjątek jako wartość RouteData, co zilustrowałem w tej odpowiedzi: http://stackoverflow.com/a/5229581/29407 –

Powiązane problemy