2016-05-18 10 views
1

Ich fange und umadressiere 404 Fehler zu einem Fehler Controller \ Ansichten mit dem folgenden Code.Warum gibt Response.StatusCode = (int) HttpStatusCode.NotFound mir den generischen Fehlerhandler?

Response.Clear(); 
Server.ClearError(); 
var routeData = new RouteData(); 
routeData.Values["controller"] = "Error"; 
routeData.Values["action"] = "HttpError"; 
routeData.Values["exception"] = exception;   

Response.StatusCode = 500; 
//if http 404 redirect to http404 action 
if (httpException != null) 
{ 
    Response.StatusCode = httpException.GetHttpCode(); 
    switch (Response.StatusCode) 
    { 
     case 404: 
      routeData.Values["action"] = "Http404"; 
      break; 
    } 
} 

Im Fehlercontroller, wenn ich gesetzt Response.StatusCode = (int) HttpStatusCode.NotFound ich die generische Fehlerbehandlung bekommen, nicht die Ansicht kehrte ich. Dies scheint nur in der Produktion zu passieren. Irgendwelche Ideen warum?

[AllowAnonymous] 
public ActionResult Http404() 
{ 
    //this line causes generic error handler 
    Response.StatusCode = (int)HttpStatusCode.NotFound; 

    var viewModel = new ErrorViewModel 
    { 
     Description = "Hmm, the page you're looking for can't be found" 
    }; 

    return View("Error", viewModel); 
} 

Antwort

0

Wenn Sie eine benutzerdefinierte StatusCode in Ihrer Steuerung Aktionsmethode setzen und wollen Standardfehlerbehandlung außer Kraft zu setzen, müssen Sie eine der folgenden Funktionen ausführen:

  • Set Response.TrySkipIisCustomErrors = true in der Controller-Methode
  • Legen Sie die folgenden in Ihrer Web.config:

    <system.webServer> <httpErrors existingResponse="PassThrough"></httpErrors> </system.webServer>

Weitere Details hier: https://stackoverflow.com/a/22477783/459102