2012-04-15 5 views
3

Ich habe die 404-Behandlung für den allgemeinen Fall in ASP.NET MVC 3 implementiert, wenn ein Controller/View nicht gefunden wird. Aber wie sollte es in der Steuerung gehandhabt werden, wenn der Benutzer versucht, auf etwas zuzugreifen, das nicht gefunden werden kann? Zum Beispiel www.foo.bar/Games/Details/randomjunk wird dies innerhalb GamesController nennen:Benutzer korrekt an 404 senden, wenn dynamischer Inhalt nicht gefunden wird (ASP.NET MVC)

public ActionResult Details(string id) // id is 'randomjunk' 
{ 
    if(DoesGameExist(id) == false) 
    // Now what? 

ich nur ein return Redirect('/Errors/Http404'); tun könnte, aber das scheint nicht, wie der richtige Weg, es zu tun. Solltest du eine Ausnahme oder etwas anderes werfen?

Wir könnten in diesem Fall eine spezielle Sichtweise haben, aber zu Beginn brauchen wir einen guten Weg, den wir auf mehrere Fälle anwenden können.

Edit: Ich möchte meine freundliche 404 Seite zeigen, die ich bereits für den allgemeinen Fall habe.

Antwort

8

sollten Sie werfen Httpexception 404:

throw new HttpException(404, "Page not Found"); 
+0

Das macht genau das, was ich will! Der Benutzer landet bei '/ Errors/Http404? Aspxerrorpath =/Games/Details/randomjunk', sieht eine nette Seite und der Fehler wird auf dem Server protokolliert. –

5

EDIT: Anscheinend per Darin Dimitrov, was ich vorher hatte funktioniert nicht einmal mit customErrors. Als Antonio Bakula says in der anderen Antwort, müssen Sie tun:

throw new HttpException(404, "Not found") 

Dann arbeiten die Custom.

Es gibt eine eingebaute in Hilfsmethode namens HttpNotFound so können Sie einfach tun:

return HttpNotFound();

Sie könnten auch explizit eine 404 mit HttpStatusCodeResult zurück:

return neue HttpStatusCodeResult (404);

HttpStatusCodeResult ist hilfreich, wenn es keine bestimmte Hilfsmethode oder -klasse für den gewünschten Code gibt.

Sie sollten dies auch in Ihrer Web.config haben:

<customErrors> 
    <error statusCode="404" redirect="~/Custom404Page.html"/> 
</customErrors> 

Sie auch zusätzliche Leitungen für andere Zustände haben kann, und ein defaultRedirect.

+0

Ja, ich habe das versucht, aber das gibt dem Benutzer eine 404 statt einer richtigen Webseite mit einer Fehlermeldung. I.e. Wenn Sie in Chrome versuchen, sagt Chrome "Hoppla! Dieser Link scheint kaputt zu sein." anstatt meine freundliche Nachricht "Ich kann die Seite nicht finden, sorry" zu sehen. –

+0

@ John-Philip, Sie müssen es auch in Ihrer Web.config konfigurieren. Ich werde das genaue XML finden. –

+2

Das?

1

Sie eine HttpStatusCodeResult zurückkehren konnte.

return new httpStatusCodeResult(404); 
+0

Dies sendet ein 404 Http-Ergebnis an den Besucher, was dazu führt, dass der Browser seine eigene "Seite nicht gefunden" anzeigt, anstatt dass die Webseite sich darum kümmert und eine korrekte Marke zeigt. "Leider konnten wir nicht finden, wonach Sie suchen." Seite. –

Verwandte Themen