2011-02-11 13 views
18

Me preguntaba si es posible arrojar un error 404 dentro de una página (código detrás)? ¿O posiblemente incluso lanzar otro tipo de página de error como 408 (tiempo de espera) o 401 (se requiere autenticación)?Posible lanzar un error 404 dentro de una página ASP.Net?

Nota: No solo deseo que la página devuelva un código de estado de 404, quiero que use la página de error 404 ASP.Net (o mis CustomErrors).

Algo como esto en el código detrás:

if(id>10){ //if id is greater than 10, then it doesn't exist here 
    throw 404Error(); 
} 

Respuesta

29

que podría lanzar un HttpException y establecer el código de estado correspondiente:

throw new HttpException(404, "Not found"); 

También se trabajará con otros códigos de estado. Solo un comentario sobre el 401: como probablemente sepa, cuando ASP.NET MVC detecta este código, lo redirecciona automáticamente a la página de inicio de sesión y obtener una página de error personalizada para el código de estado 401 podría ser un verdadero PITA para implementar.

+0

Hmm. Si se lanzó esta excepción cuando CustomErrors está desactivado, ¿mostrará la página de excepciones estándar de ASP.Net con stacktrace? – Earlz

+2

@Earlz, si 'customErrors =" Off "' probablemente obtendrá un YSOD. –

+0

Tenía curiosidad por cuando en un entorno de desarrollo. ¡Eso parece funcionar sin embargo! – Earlz

17

Una manera mucho mejor es:

'Throws a 404 Not found: 
Response.Clear() 
Response.StatusCode = 404 
Response.End() 

No hay necesidad de lanzar una excepción y lo anterior funciona mucho mejor cuando el uso de páginas de error personalizados en el web.config

+1

También puede usar las enumeraciones en System.Net.HttpStatusCode. –

+2

'Response.End()' debe evitarse ya que es un arrastre de ASP clásico. Lanza una 'ThreadAbortException' que no funciona bien en entornos de carga pesada. En su lugar, llame a 'HttpContext.Current.ApplicationInstance.CompleteRequest' y, si es necesario, establezca' Response.SuppressContent = true' después de escribir un mensaje de error. – Dai

+0

Esta respuesta es especialmente útil porque pone el fragmento de código en contexto incluyendo las llamadas Clear() y End(). –

Cuestiones relacionadas