Pregunta

Como puede ver, esta es una pregunta de un desarrollador que no es web. Me gustaría tener una página ASPX que, en ciertas circunstancias, puede generar un error 401 desde el código. Lo ideal sería mostrar la página estándar de IIS.

¿Fue útil?

Solución

Establezca Response.StatusCode y luego - Si necesita detener la ejecución, llame a Response.End ( ) .

Otros consejos

Response.StatusCode = 401;
Response.End();

Creo que todavía prefiero:

throw new HttpException(401, "Auth Failed")

No creo que el método Response.StatusCode genere 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 genera errores personalizados.

Además, es posible que esté utilizando un servicio de registro de errores en toda la aplicación, como ELMAH o algo, y no creo que el método Response.StatusCode se registre allí, tampoco.

Nota: Ahora veo que la pregunta dice 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.

Debería poder usar lo siguiente, de acuerdo con MSDN .

Throw New HttpException(401, "Auth Failed")

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

Un comentario adicional.

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

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

Response.ClearContent();
Response.StatusCode = 401;
Response.End();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top