2010-03-04 14 views
7

I custom gesetzt in meinem web.configASP.NET MVC benutzerdefinierte Fehlerseite (Statuscode 404 führt eine 500)

<customErrors mode="On" defaultRedirect="/Error/GeneralError"> 
    <error statusCode="404" redirect="/Error/NotFound"/> 
</customErrors> 

fein Dies funktioniert vor Ort haben. Ein 404 löst einen 404 aus. Auf dem Shared-Hosting wird die Seite des Standard-Servers 404 angezeigt, es sei denn, ich habe 404 so eingestellt, dass sie auf/Error/NotFound zeigt. Das ist gut. Nun wird die benutzerdefinierte 404-Seite angezeigt, außer der Antwortstatuscode ist 200. Wenn ich also versuche, Response.StatusCode = 404 zu werfen; in meiner NotFound Aktion in Errorcontroller wie folgt aus:

public class ErrorController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = 404; 
     return View(); 
    } 
} 

der Server führt einen Statuscode 500 Internal Server Error aber meine GeneralError Seite zeigt nicht nur eine leere weiße Seite ohne Quelle.

Ich habe viele verschiedene Kombinationen ausprobiert, aber ich kann nicht finden, wie man meine benutzerdefinierte 404-Seite zusammen mit einer 404-Antwort zeigt.

Irgendwelche Ideen?

+0

Gibt es einen Schaden, der es erlaubt, mit 200 OK auf einem NotFound zu reagieren? Vielleicht Probleme mit Web-Crawling oder Google Webmaster-Tools. – mark123

+0

Nur ein Gedanke. Wäre es nicht besser zu verwenden: defaultRedirect = "~/Fehler/GeneralError" und redirect = "~/Fehler/NotFound" mit MVC-Anwendungen. (Beachten Sie die ~ am Anfang der Strings. Dies wird auf die Basis der Anwendung nicht die Basis der Domäne zuordnen ... wie Sie vielleicht schon wissen.) – jwwishart

Antwort

20

fand ich hier einige interessante Informationen aus: http://blog.angrypets.com/2008/03/responsetryskip.html

Response.TrySkipIisCustomErrors = true; 

Einstellung TrySkipIisCustomErrors auf true nach dem Response.StatusCode = 404; kümmert sich um das Problem.

+0

Vielen Dank! Wir haben uns über eine Stunde lang die Köpfe gebrochen .. – adams

+1

Ich bin sehr froh, dass es geholfen hat. :) – mark123

1

Verwenden Sie kein customErrors Element (mit Ausnahme von mode="On" für lokale Tests). Fügen Sie stattdessen eine Application_EndRequest Methode zu Ihrer MvcApplication per Marco's Better-Than-Unicorns MVC 404 Answer hinzu.

Verwandte Themen