Ich habe einen ASP.Net-Einzeldatei-Webdienst (eine .ashx
-Datei mit einer IHttpHandler
Implementierung), die Fehler als Antworten mit 500 internen Serverfehler Statuscodes zurückgeben kann. Dies ist eine relativ einfache Sache in PHP zu tun:Wie wird ein Statuscode 500 in ASP.Net gesendet und trotzdem in die Antwort geschrieben?
header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";
Die ASP.Net (C#) gleichwertig sein sollte:
Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);
Natürlich ist dies nicht wie erwartet funktionieren; Stattdessen fängt IIS den 500-Statuscode ab, löscht alles, was ich an das Objekt Response
geschrieben habe, und sendet entweder Debug-Informationen oder eine benutzerdefinierte Fehlerseite, je nachdem, wie die App konfiguriert ist.
Meine Frage - wie kann ich dieses IIS Verhalten unterdrücken und Fehlerinformationen direkt von meiner IHttpHandler
Implementierung senden?
Diese App ist ein Port von PHP; Die Client-Seite ist bereits geschrieben, also bin ich im Wesentlichen mit dieser Spezifikation fest. Das Senden von Fehlern mit einem 200-Statuscode passt leider nicht in die Form.
Idealerweise muss ich das Verhalten programmatisch steuern, da dieser Teil eines SDK ist, dass wir ohne „bearbeiten diese Datei“ und verteilen wollen „diese IIS ändern Einstellung“ Zusatzanleitung.
Danke!
Bearbeiten: Sortiert. war das Ticket. Beeindruckend.
Wenn möglich, dass ich auf einem Produktionsstandort interne Informationen vermeiden würde, wie die Datenbankposition heraus geben - Hacker diese Sachen lieben es, sehr viel einfacher macht ihre Angriffe. – devstuff
Guter Punkt, aber das ist ein gesicherter Web-Service, keine Website. Datenbankverbindung wird nicht einmal ohne vorher erfolgreiche HTTP-Authentifizierung versucht :) –