2015-06-25 3 views
24

Die Dokumentation sagtWas bedeutet existingResponse = "PassThrough" in IIS?

existingResponse="PassThrough"

Blätter die Antwort unberührt, wenn eine vorhandene Antwort vorhanden ist. http://www.iis.net/configreference/system.webserver/httperrors#005

Aber was das bedeutet durch „bestehende Antwort existiert“?

z. Ich möchte, dass mein customErrors-Handler die ASP.NET-Antwort unterdrückt, sodass IIS denkt, dass die Antwort nicht existiert. Wie würde ich das tun?

+1

Siehe http://serverfault.com/a/124074/87017 – Pacerier

Antwort

33

Es gibt drei mögliche Werte, aus dem Schema:

<attribute name="existingResponse" type="enum" defaultValue="Auto"> 
    <enum name="Auto" value="0" /> 
    <enum name="Replace" value="1" /> 
    <enum name="PassThrough" value="2" /> 
</attribute> 

Grob gesagt, hier ist, wie ich das verstehen:

Pass-Through - verlässt die vorhandene Reaktion allein, solange es ist . Es ist möglich, dass Ihre Anwendungslogik nichts zurückgibt. In diesem Fall wird die hier definierte Fehlerseite verwendet.

Auto - verwendet die IIS-Fehlerseiten als Ausnahme in diesem Knoten definiert, wenn in asp.net Sie festgelegt haben:

Response.TrySkipIisCustomErrors = true; 

, wenn Sie das getan haben, ist die Antwort von Ihrem Code verwendet.

Ersetzen - verwendet immer die IIS-Fehlerseiten, auch wenn der Entwickler TrySkipIisCustomErrors festgelegt hat.

Die letzte Option scheint die zu sein, die Sie wollen.


Edit:

Bedenken Sie:

existingResponse="PassThrough" 

versuchen nun eine nicht vorhandene asp.net-Seite zu öffnen, werden Sie sehen:

enter image description here

Obwohl die Ressource nicht da war, Die Laufzeit hat eine Antwort geliefert, sie wird an den Browser weitergeleitet.

Versuchen Sie nun, eine nicht vorhandene HTML-Seite zu öffnen. Diesmal erhalten wir immer noch einen 404-Status, aber eine leere Seite.

Wechsel zu:

existingResponse="Auto" 

die fehlende asp.net Seite zeigt immer noch die asp.Netto-Fehlerseite, aber für die fehlende HTML-Seite erhalten wir jetzt die IIS ein:

enter image description here

Also, zusammenfassend: wenn bei fehlenden HTML und aspx Seiten mit verschiedenen existingResponse Werten suchen, wir verschiedene Fehlerseiten erhalten:

   .html-404 .aspx-404 .aspx-500 
-------------------------------------------------- 
Auto    IIS   asp.net asp.net 
PassThrough  -   asp.net asp.net 
Replace   IIS   IIS  IIS 
+0

so wie ich so tun, als es keine Antwort von ASP.NET ist, so dass 'PassThrough' eine Fehlerseite verwendet? Ich habe versucht, 'Response.End' aufzurufen, ohne etwas zu senden, aber es hat nicht funktioniert. –

+1

_Die letzte Option scheint die zu sein, die Sie möchten_ - Ich möchte nur IIS-Fehlerseite senden, wenn keine andere Antwort von ASP.NET, nicht jede Antwort mit Fehlercode. –

+0

@AndreyShchekin - in diesem Fall scheint PassThrough die beste Option zu sein. –