Kann ein ASP.NET MVC-Bereich seine eigenen Fehlerseiten anzeigen?

8

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:

  • Wenn ich zu "example.com/does/not/exist" navigiere, bekomme ich die erwartete Fehlerseite bei ~/404.aspx .
  • Wenn ich zu "example.com/MyArea1/does/not/exist" navigiere, werde ich das tun Erhalte die benutzerdefinierte Fehlerseite unter ~/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?

    
cyrotello 10.10.2016, 22:13
quelle

1 Antwort

6

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:

%Vor%

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.

    
cyrotello 18.10.2016, 14:20
quelle