wake-up-neo.com

Wie kann ich eine eigene 404-Seite zurückgeben?

Im Falle eines Fehlers auf meiner Website gehe ich folgendermaßen vor:

        Server.Transfer("/error.aspx");

und diese Seite hat Code:

protected void Page_Load(object sender, EventArgs e)
{
    ...

    Response.StatusCode = 404;
}

Wenn ich auf dem localhost arbeite, wird auf der Seite zusammen mit dem für die Seite zurückgegebenen 404-Status die Meldung "Richtige Fehlerbeschreibung" angezeigt.

Sobald ich den gleichen Code im Internet veröffentlicht habe, werden alle fehlerhaften Seiten weiterhin mit dem Statuscode 404 angezeigt, aber die haben den Inhalt nicht. Stattdessen wird die Standardfehlermeldung 404 angezeigt:

404 - Datei oder Verzeichnis nicht gefunden.

wenn die Zeile "Response.StatusCode = 404" auskommentiert ist, wird die richtige Seite bereitgestellt, die jedoch den Statuscode 200 hat.

Frage: wie man benutzerfreundliche Fehlerseite zurückgibt, die gleichzeitig 404 Fehlerstatuscode hat?

Irgendwelche Gedanken sind willkommen! Vielen Dank im Voraus!

P.S. ASP.NET 4.0

15
Budda
<customErrors mode="On" defaultRedirect="~/Error/GenericErrorPage.aspx">

     <error statusCode="404" redirect="~/Error/404.aspx" />

</customErrors>

http://msdn.Microsoft.com/en-us/library/h0hfz6fc(v=vs.71).aspx

http://msdn.Microsoft.com/en-us/library/aa479319.aspx

14
adt

Ein ha!

Versuche dies:

Response.TrySkipIisCustomErrors = true;
Response.Status = "404 Not Found";
Response.StatusCode = 404;

Sobald ich vor dem Festlegen des Statuscodes Response.TrySkipIisCustomErrors=true hinzugefügt habe, wird die normale Seitenkopie angezeigt UND ein 404 zurückgegeben. Ohne diese Zeile wird die Standardseite IIS 404 angezeigt.

Alternativ kann dies in der web.config so eingestellt werden:

<system.webServer>
    <httpErrors existingResponse="PassThrough">
        // custom error page mappings
    </httpErrors>
</system.webServer>

Der Schlüssel hier ist existingResponse="PassThrough"

Dies wurde zu IIS7 hinzugefügt und ist daher für Standorte erforderlich, die im integrierten Pipeline-Modus ausgeführt werden.

Weitere Informationen: http://msdn.Microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

Update Aktualisierung zur Klärung/weitere Informationen, da dies für die Leute immer noch nützlich ist. Wenn Sie eine einfache, generische 404-Seite benötigen, sollten Sie die Methode web.config verwenden (und am besten eine einfache HTML-Seite erstellen).

Die von mir beschriebene Methode funktioniert am besten, wenn Sie eine hochdynamische oder CMS-gesteuerte Site haben, auf der eine bestimmte Seite möglicherweise eine 404 zurückgibt, Sie jedoch Informationen zu Ihren Besuchern anzeigen möchten.

Zum Beispiel könnte eine Seite mit Sonderangeboten (offers/some-offer) eine Suche nach dem Angebot (some-offer) durchführen und, falls es dieses nicht gibt, alternative oder verwandte Angebote anzeigen, während ein 404 unter der Haube zurückgegeben wird. Soweit dem Besucher bekannt ist, wurde ihm gerade mitgeteilt, dass das Angebot nicht mehr verfügbar ist. Er befindet sich jedoch weiterhin im Bereich "Angebote". Wir weisen die Roboter jedoch an, die URL zu deaktivieren. Dies wäre viel schwieriger, wenn es nur eine generische 404-Seite gäbe.

10
Jag

Sie erreichen dies, indem Sie Ihre web.config-Datei konfigurieren. Überprüfen Sie den folgenden Link zu einem Artikel, in dem unten auf der Seite erläutert wird, wie verschiedene benutzerdefinierte Fehlerseiten für verschiedene HTTP-Fehlerzustände angezeigt werden.

6
utsikko

Um Ihre eigene Seite mit dem korrekten 404 Statuscode anzuzeigen, können Sie den folgenden Code verwenden:

1) Fügen Sie in Ihrer web.config Folgendes hinzu:

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.htm" />
</customErrors>

und:

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="404.htm" responseMode="File"/>
</httpErrors>

2) Fügen Sie eine 404.htm-Datei zum root Ihrer Website hinzu:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>404 - Not Found</title>
    <meta http-equiv="refresh" content="5;url=/404-PAGE" />
  </head>
  <body>
       CONTENT
  </body>
</html>

Sie können entweder Inhalt zum Hauptteil dieser Datei hinzufügen und die META-Aktualisierung entfernen oder einfach die META-Aktualisierung verwenden, um eine Seite in Ihrem CMS zu öffnen.

3
Menderes

Als ich die Antworten von Jag und ADT kombinierte, hatte ich immer noch ein Problem. Als ein 404 vom statischen Dateihandler (im Gegensatz zu ASP.NET) verarbeitet wurde, erhielt ich eine leere Antwort. (Der Status war korrekt 404.)

Um das Problem zu beheben, musste ich errorMode="Custom" zum <httpErrors>-Element hinzufügen. Wenn Ihre Fehlerseite ASP.NET verwendet, müssen Sie responseMode="ExecuteURL" einfügen.

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
</system.web>

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="/Error.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>
2
mm201
<httpErrors errorMode="Custom">
     <remove statusCode="404"/>
     <error statusCode="404" path="ErrorPages/error404.htm" responseMode="Redirect"/>
  </httpErrors>

Dies funktioniert bei mir, wenn ich im Pfadattribut nicht die Tilde (~) verwende

0
A.moizRiaz