2008-10-20 12 views

Odpowiedz

12

Powinieneś być w stanie użyć następujących, zgodnie z MSDN.

Throw New HttpException(401, "Auth Failed") 

Edit Po obejrzeniu innych odpowiedzi określające kod statusu byłby bardziej odpowiedni.

+3

Próbowałem tego i gdy sprawdziłem odpowiedzi HTTP w przeglądarce, mam 500 (wewnętrzny błąd serwera) zamiast 401 (Nieautoryzowane) – dreamerkumar

+0

Ponadto, nie rzuca wyjątkiem gorsze pod względem wydajności? – dreamerkumar

+0

Naprawdę nie obchodzi mnie, co jest preferowane. Ta metoda jest krótsza i łatwiejsza do zapamiętania, więc używam jej. – Brad

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

Nie mam pojęcia, dlaczego to zostało odrzucone - to prawie tak samo jak moja (głosowana w górę) odpowiedź, tylko w formie kodu. Oczywiście, nie ma linków, które * mogą * być przydatne, ale wciąż jest to doskonała odpowiedź ... –

+0

Całkowicie zgadzam się z Jonem. Ponieważ nie mogę zaakceptować dwóch odpowiedzi, zaakceptowałem odpowiedź Jona i głosowałem za nią. Jest kilka rzeczy, które powinienem sam wymyślić, ale to dało mi przewagę. Dzięki! –

+3

Prawdopodobnie został odrzucony, ponieważ został przesłany tuż po @ jon, więc wyglądało to na odpowiedź typu "piggy-back" (chociaż obie były napisane jednocześnie). Dzięki za awanse:) –

38

Chyba wciąż wolą:

throw new HttpException(401, "Auth Failed") 

Nie sądzę metoda Response.StatusCode wyzwala niestandardowych błędów zdefiniowane w pliku web.config, na przykład

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

Rzucanie nowego wyjątku zdecydowanie wyzwala błędy niestandardowe.

Być może używasz narzędzia do rejestrowania błędów w całej aplikacji, na przykład ELMAH lub coś podobnego, i nie sądzę, aby została tam również zapisana metoda Response.StatusCode.

Uwaga: Widzę teraz pytanie, które mówi, że najlepiej powinna być wyświetlana standardowa strona błędu IIS. Oczywiście, strony błędów niestandardowych są niepotrzebne . W takim przypadku użyłbym metody Response.StatusCode.

+0

Hej, to jest niesamowite! Właśnie to, co potrzebowałem wiedzieć! –

9

Jeden dodatkowy komentarz.

Jeśli część strony została już zapisana w buforze wyjściowym, ważne jest, aby wyczyścić zawartość buforowaną lub strona może nie być wyświetlana poprawnie.

Jest to dość prawdopodobne w środowisku szablonowym. na przykład Strony wzorcowe ...

Response.ClearContent(); 
Response.StatusCode = 401; 
Response.End(); 
Powiązane problemy