0

Ich habe gerade eine ASP.NET MVC-Site veröffentlicht, auf der ich benutzerdefinierte Fehlerseiten erstellt habe. Hier ist, wie ich sie umgesetzt:Überschreiben der Standardfehlerseiten des Webhosts

in Errorcontroller:

public ActionResult NotFound() 
{ 
    Response.StatusCode = (int)HttpStatusCode.NotFound; 
    return View(); 
} 

in web.config:

<customErrors mode="On" defaultRedirect="~/500"> 
<error statusCode="403" redirect="~/403"/> 
<error statusCode="401" redirect="~/401"/> 
<error statusCode="404" redirect="~/404"/> 
<error statusCode="409" redirect="~/409"/> 
<error statusCode="500" redirect="~/500"/></customErrors> 

natürlich fehlerhafte Anfragen geleitet werden das NotFound Verfahren, und so weiter. Theoretisch sollte es funktionieren.

Allerdings habe ich ein Problem: Jetzt, da ich meine Website auf meinem Host (GoDaddy) veröffentlicht habe, habe ich festgestellt, dass einen Fehlercode für HTTP-Status verursacht meine benutzerdefinierten Fehlerseiten durch die ersetzt Standard GoDaddy Einsen.

Wie kann ich das umgehen? Natürlich wäre die einfachste Lösung, einen 200 Statuscode zurückzugeben, aber ich würde lieber den echten Fehlercode (für SEO und so) zurückgeben.

Antwort

1

Sie sollten GoDaddy darüber fragen. Dies ist keine ASP.NET MVC-Frage. Wenn sie alle Statuscodes, die sich von 200 unterscheiden, kapern, um ihre eigene Fehlerseite zu zeigen, können Sie nicht viel tun.

1

Sie sollten benutzerdefinierte Viewresult für jeden Statuscode und außer Kraft setzen seine ExecuteResult Methode wie diese

public class NotFoundViewResult : ViewResult 
{ 
    public NotFoundViewResult() 
    { 
     ViewName = "404"; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 

     response.StatusCode = 404; 
     // This will prevent IIS7 (GoDaddy) from overwriting your error page! 
     response.TrySkipIisCustomErrors = true; 

     base.ExecuteResult(context); 
    } 
} 

Ihre 404 Ansicht in freigegebenen Ordner sein sollte, damit jeder darauf zugreifen können und Ihre Errorcontroller sollte nun so aussehen

erstellen
+0

+1 für Erwähnung response.TrySkipIisCustomErrors - http://StackOverflow.com/Questions/1706934/asp-net-mvc-app-Custom-error-pages-not-displaying-in-shared-hosting-environment hat eine detailliertere Antwort und Links zu einem nützlichen Eintrag in Rick Strahls Blog - http://www.west-wind.com/weblog/posts/745738.aspx – KevD