2008-10-20 11 views

Respuesta

12

Debería poder simplemente utilizar lo siguiente, según MSDN.

Throw New HttpException(401, "Auth Failed") 

Editar Después de ver las otras respuestas ajuste el código de estado sería más apropiado.

+3

He intentado esto y cuando me registré la respuesta HTTP en el navegador, tengo una 500 (Internal Server Error) en lugar de una excepción 401 (no autorizado) – dreamerkumar

+0

Además, no es tirar peores en términos de rendimiento? – dreamerkumar

+0

Realmente no me importa lo que se prefiera. Este método es más corto y más fácil de recordar, así que lo uso. – Brad

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

No tengo idea de por qué se votó negativamente, es más o menos lo mismo que mi respuesta (respondida), solo en forma de código. Claro, no tiene los enlaces que * pueden * ser útiles, pero sigue siendo una respuesta perfectamente buena ... –

+0

Estoy totalmente de acuerdo con Jon. Como no puedo aceptar dos respuestas, acepté la respuesta de Jon y voté esta. Sin embargo, hay algunas cosas que debería resolver por mi cuenta, pero me dieron una ventaja. ¡Gracias! –

+3

Probablemente fue rechazado porque fue presentado justo después de @ jon, por lo que parecía una respuesta de piggy-back (aunque ambos fueron escritos simultáneamente). Gracias por los votos a favor): –

38

Creo que prefiero:

throw new HttpException(401, "Auth Failed") 

no creo que el método Response.StatusCode provoca errores personalizados definidos en el archivo web.config, por ejemplo

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

Lanzar una nueva excepción definitivamente desencadena errores personalizados.

Además, es posible que esté utilizando una función de registro de errores de toda la aplicación, al igual que ELMAH o algo, y no creo que el método Response.StatusCode se registra allí, tampoco.

Nota: Veo ahora que la pregunta decía que, idealmente, debería mostrarse la página de error estándar de IIS. Obviamente, las páginas de error personalizadas son no deseadas. Yo usaría el método Response.StatusCode en ese caso.

+0

¡Oye, eso es increíble! ¡Justo lo que necesitaba saber! –

9

Un comentario adicional.

Si una parte de la página ya se ha escrito en el búfer de salida, entonces es importante que borre cualquier contenido almacenado en búfer o que la página no aparezca correctamente.

Esto es bastante probable en un entorno modelado. p.ej. Páginas maestras ...

Response.ClearContent(); 
Response.StatusCode = 401; 
Response.End(); 
Cuestiones relacionadas