2010-01-04 2 views
44

Wie ich eine 404 oder FileNotFound Ausnahme/Ergebnis aus meiner Aktion zu werfen und lassen Sie IIS meine CustomErrors Config-Abschnitt verwenden, um die 404-Seite anzuzeigen?Werfen/Rückgabe eines 404 Actionresult oder Ausnahme in Asp.net MVC und lassen IIS behandeln

ich meine Custom habe wie so definiert

<customErrors mode="On" defaultRedirect="/trouble"> 
    <error statusCode="404" redirect="/notfound" /> 
</customErrors> 

Mein erster Versuch einer Action, die diese nicht funktioniert hinzufügen versucht.

public class NotFoundResult : ActionResult { 
    public NotFoundResult() { 

    } 

    public override void ExecuteResult(ControllerContext context) { 
     context.HttpContext.Response.TrySkipIisCustomErrors = false; 
     context.HttpContext.Response.StatusCode = 404; 
    } 
} 

Aber das zeigt nur eine leere Seite und nicht meine/not-found Seite

:(

Was kann ich tun?

Antwort

128

ASP.NET MVC 3 eingeführt, um die HttpNotFoundResult Aktion Ergebnis, das bevorzugt verwendet werden sollte, um die Ausnahme manuell mit dem HTTP-Statuscode zu überschreiben Dies kann auch über die Controller.HttpNotFound-Methode auf dem Controller zurückgegeben werden:

public ActionResult MyControllerAction() 
{ 
    ... 

    if (someNotFoundCondition) 
    { 
     return HttpNotFound(); 
    } 
} 

Vor MVC 3 Sie hatte folgendes zu tun:

throw new HttpException(404, "HTTP/1.1 404 Not Found"); 
+1

nennen Wäre dies degradieren, weil man nicht von Hand tun dies werden sollte. Verwenden Sie die HttpNotFound-Controller-Methode, wie in einer anderen Antwort gezeigt. – xanadont

+8

True - aber HttpNotFound wurde in ASP.NET MVC 3 eingeführt. Diese Frage (und meine Antwort) liegt vor und war ein geeigneter Ansatz in früheren Versionen. Ich habe jetzt meine Antwort bearbeitet, um den neueren Ansatz zu veranschaulichen, der in MVC3 bevorzugt wird. –

+4

Rad. Ich habe dich wiedergewählt. – xanadont

Verwandte Themen