Wie Sie sehen können, ist dies eine Frage von einem Nicht-Web-Entwickler. Ich möchte eine ASPX-Seite haben, die unter bestimmten Umständen einen 401 Fehler vom Code erzeugen kann. Idealerweise würde es die IIS-Standardseite anzeigen.Wie generiert man einen 401 Fehler programmatisch in einer ASP.NET-Seite
Antwort
Setzen Sie Response.StatusCode und dann - wenn Sie die Ausführung stoppen müssen - rufen Sie Response.End().
Sie sollten in der Lage sein, nur die folgenden zu verwenden, nach MSDN.
Throw New HttpException(401, "Auth Failed")
bearbeiten Nachdem ich die anderen Antworten zu sehen, den Statuscode Einstellung wäre besser geeignet.
Response.StatusCode = 401;
Response.End();
Ich habe keine Ahnung, warum das abgelehnt wurde - es ist ziemlich genau das Gleiche wie meine Antwort (nur abgestimmt), nur in Codeform. Sicher, es hat nicht die Links, die * nützlich sein können *, aber es ist immer noch eine vollkommen gute Antwort ... –
Ich stimme Jon vollkommen zu. Da ich zwei Antworten nicht akzeptieren kann, habe ich Jons Antwort angenommen und diese gewählt. Das sind ein paar Dinge, die ich selbst herausfinden sollte, aber es gab mir einen Vorsprung. Vielen Dank! –
Es wurde wahrscheinlich abgelehnt, weil es kurz nach @ Jon's eingereicht wurde, so dass es wie eine Huckepack-Antwort aussah (obwohl sie beide gleichzeitig geschrieben wurden). Danke für die upvotes though:) –
Ich glaube, ich immer noch lieber:
throw new HttpException(401, "Auth Failed")
Ich glaube nicht das Response.StatusCode
Methode in der Datei web.config definiert benutzerdefinierte Fehler auslöst, z.B.
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="401" redirect="AuthFailed.htm" />
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
Das Auslösen einer neuen Ausnahme löst auf jeden Fall benutzerdefinierte Fehler aus.
Auch möglicherweise verwenden Sie eine Anwendung-weite Fehlerprotokollierung, wie ELMAH oder etwas, und ich glaube nicht, dass die Response.StatusCode
Methode dort auch protokolliert werden würde.
Hinweis: Ich sehe jetzt die Frage, dass im Idealfall die Standard-IIS-Fehlerseite angezeigt werden sollte. Offensichtlich sind die benutzerdefinierten Fehlerseiten nicht erwünscht. Ich würde in diesem Fall die Response.StatusCode
Methode verwenden.
Hey, das ist großartig! Genau was ich wissen musste! –
Ein zusätzlicher Kommentar.
Wenn ein Teil der Seite bereits in den Ausgabepuffer geschrieben wurde, ist es wichtig, dass Sie alle gepufferten Inhalte löschen oder die Seite möglicherweise nicht korrekt angezeigt wird.
Dies ist sehr wahrscheinlich in einer Vorlagenumgebung. z.B. Masterseiten ...
Response.ClearContent();
Response.StatusCode = 401;
Response.End();
Ich versuchte dies und wenn ich die HTTP-Antwort im Browser aktiviert ist, ich habe einen 500 (Internal Error Server) anstelle einer 401 (Unauthorized) – dreamerkumar
Auch ist nicht zu werfen Ausnahme schlimmer in Bezug auf die Leistung? – dreamerkumar
Mir ist es wirklich egal, was bevorzugt wird. Diese Methode ist kürzer und leichter zu merken, also benutze ich sie. – Brad