Ich habe einige meiner Web-Apps in einem ASP.NET MVC-Hauptprojekt konsolidiert. Zuweisen von einigen von ihnen zu separaten Bereichen, so dass sie über Sub-Domains zugegriffen werden können.
Verwenden Sie diese (ziemlich hilfreiche) Ressource ( Ссылка ), Ich habe customErrors
und httpErrors
in Web.config
eingerichtet, sodass benutzerdefinierte Fehlerseiten angezeigt werden. Funktioniert gut.
Ich werde ein anderes Layout / Styling pro Area / Subdomain verwenden, also frage ich mich: Wie kann ich einen Bereich dazu bringen, seine eigenen Fehlerseiten anzuzeigen?
Bei der aktuellen Einrichtung werden alle Subdomains die wichtigsten benutzerdefinierten Fehler anzeigen, die den Abschnitten customErrors
und httpErrors
hinzugefügt wurden (403.html, 404.html usw.). aber ich bevorzuge maßgeschneiderte Fehlerseiten für einige Subdomains. (Wenn einer der Bereiche zum Beispiel ausschließlich von einer separaten Domäne behandelt wird, ist es nicht praktisch, die regulären Fehlerseiten zu bedienen.)
Aktualisierung: Hier ist das Szenario mit Code, wie angefordert. Danke an Ben Foster, der hier eine gute Anleitung gab: Ссылка 2 . Ich habe den Code für customErrors, aber nicht die entsprechenden httpErrors ... weggelassen.
%Vor%Der obige Code funktioniert gut:
~/404.aspx
. ~/Areas/MyArea1/404.aspx
. Die Herausforderung:
Jetzt möchte ich, dass ein Bereich (MyArea2) von einer völlig separaten Domäne bedient wird (z. B. exampleOnMyOtherDomain.com), wobei HostDomainConstraint
(wie von @TetsuyaYamamoto empfohlen, in einem Kommentar unten) verwendet wird. Ein Link, auf den über "example.com/MyArea2/validlink" zugegriffen werden könnte, wird nun folgendermaßen aufgerufen: "exampleOnMyOtherDomain.com/validlink".
Nun, wenn ich "exampleOnMyOtherDomain.com/does/not/exist" versuche, werde ich die Top-Level 404 ( ~/404.aspx
) serviert. Dies liegt wahrscheinlich daran, dass sich "MyArea2" nicht mehr im Pfad befindet, daher wird der Ort mit dem Pfad "MyArea2" nicht aufgenommen.
Wie kann ich erreichen, dass der Bereich (MyArea2) seine eigenen Fehlerseiten bedient?
Gestützt auf einige Nachforschungen und hilfreiche Hinweise von @TetsuyaYamamoto, habe ich die folgende Strategie angewendet.
Ich behandle das Ereignis "Application_Error" in Global.asax
mit dem folgenden Code:
Zu beachtende Punkte:
hostName.Contains("exampleOnMyOtherDomain")
sollte den Hostnamen mit dem Bereich vergleichen, den ich bearbeiten möchte. Ich füge else...if
-Anweisungen für andere Bereiche hinzu; Response.TrySkipIisCustomErrors = true
sollte verhindern, dass IIS versucht, den Fehler zu behandeln; Response.StatusCode
setzt den Statuscode entsprechend ('404', '500' ...); Server.Transfer()
liest eine Datei ein, die ich als Fehlerseite anzeigen möchte; Server.ClearError()
sollte signalisieren, dass der Fehler bereits behandelt wurde. Ich möchte, dass customErrors
/ httpErrors
weiterhin normale Fehler behandelt. Wenn die Ausführung den Block Application_Error
durchläuft, ohne behandelt zu werden (d. H.% Co_de% wird nicht aufgerufen), behandelt Server.ClearError()
/ customErrors
den Fehler.
Es scheint, dass dies eine vernünftige Strategie zur Behandlung von Fehlern für Bereiche ist, die von einer anderen Domäne bedient werden.
Tags und Links asp.net-mvc web-config custom-errors