2010-12-23 9 views
0

Ich habe festgestellt, dass wenn ich eine Seite in ASP.NET (Webforms) anfordert, die nicht existiert, der 'StaticFile' Handler die Fehlerbenachrichtigung behandelt.Abfangen/Umleiten von 404 (ASP.NET)

Ich möchte in diesen Situationen ein wenig hilfreicher sein.

Was ist der richtige Weg für mich, diesen 404 abzufangen, und als Ergebnis einige Code ausführen, um den Benutzer umzuleiten?

Zwei Möglichkeiten Ive dachte zu tun, die ich nicht wirklich mag zur Zeit tun, sind:

1 - Erstellen Sie ein Modul, das im Grunde ein if (!file.exists($url){redirect to $correctedurl})

2 tut - die error.aspx.cs ändern (oder die Standardfehlerseite) um etwas Ähnliches zu tun (yuck!)

Antwort

1

Es gibt zwei Bereiche, die Sie ändern müssen, um 404s zu erfassen. Die erste ist in IIS selbst, die kümmert sich um alle Non-Aspx-Dateien wie CSS, Jpg, Js, etc. Die zweite ist in der web.config der App selbst, die fehlende Aspx behandelt.

Der folgende Link zeigt, wie dies zu erreichen ist.

siehe here

+0

Siehe obigen Kommentar. – maxp

+0

hoffe, dass Sie den Schnitt nicht stören. Der Link ist ein großartiger Spaziergang, die Frage brauchte nur ein bisschen mehr, um zu beschreiben, worum es geht. – NotMe

1

Die Webkonfiguration hat einen customErrors Abschnitt, in dem Sie angeben können, wohin bestimmte Fehlercodes geleitet werden sollen.

Wenn Sie die Anforderung beim ersten Mal abfangen möchten, benötigen Sie eine Global.asax und reagieren auf das BeginRequest-Ereignis. An diesem Punkt können Sie feststellen, ob eine Datei auf dem Server und Response.Redirect im Kontext vorhanden ist. Stellen Sie sicher, dass Sie verstehen, dass jede Anfrage dieses Ereignis durchläuft, einschließlich JS-Dateien, CSS und Bildern. HttpApplication Documentation

+0

Problem zu sein, der Client Navigationspfad $ RequestedUrl ist -> $ Custom404Page -> $ CorrectedURL, Ich nicht seperate treffen wollen drei Seiten sollten zwei ausreichen. – maxp

+0

Ich habe gerade meine Antwort bearbeitet, die hoffentlich hilft – Joe

+0

Nein, du würdest eine Klasse erstellen, die IHttpHandler implementiert, einen Eintrag in web.config/handlers erstellen, wo du sie bestimmten oder allen Erweiterungen zuordnen könntest. In beiden Fällen würde ich prüfen, ob die Seite physisch existiert, was nicht gut genug ist. – maxp

0

eine HttpModule erstellen, die auf die Error -event Ihrer Anwendung reagiert. Hier können Sie auf die Exception und StatusCode der Antwort zugreifen und wenn der Code 404 (NotFound) ist, können Sie entsprechend darauf reagieren. Normalerweise überschreiben Sie die Anforderung, setzen StatusCode auf Gefunden und löschen die Exception. Auf diese Weise werden customErrors in web.config nicht getroffen und der Prozess wird $ RequestedUrl -> $ CorrectedURL sein.

Dies ist ein Beispiel für das Erstellen eines HttpModule, das auf Fehlerereignisse in asp.net reagiert.

http://www.codeproject.com/KB/aspnet/GlobalErrorHandler.aspx

0

rocken einfach die Custom in der web.config

<configuration> 
    <system.web> 
    <customErrors defaultRedirect="Error.htm" 
        mode="RemoteOnly"> 
     <error statusCode="404" 
      redirect="~/NotFound.aspx"/> 
    </customErrors> 
    </system.web> 
</configuration> 
+0

Ich habe das versucht, aber es hat nicht für mich funktioniert ...... – Etienne

Verwandte Themen