2008-10-20 3 views

Antwort

12

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.

+3

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

+0

Auch ist nicht zu werfen Ausnahme schlimmer in Bezug auf die Leistung? – dreamerkumar

+0

Mir ist es wirklich egal, was bevorzugt wird. Diese Methode ist kürzer und leichter zu merken, also benutze ich sie. – Brad

51
Response.StatusCode = 401; 
Response.End(); 
+7

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 ... –

+0

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! –

+3

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:) –

38

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.

+0

Hey, das ist großartig! Genau was ich wissen musste! –

9

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();