2010-01-04 13 views
44

¿cómo puedo arrojar una excepción/resultado 404 de FileNotFound de mi acción y dejar que IIS use la sección de configuración de customErrors para mostrar la página 404?lanzando/devolviendo un resultado de acción 404 o una excepción en Asp.net MVC y dejando que IIS lo maneje

he definido mis customErrors al igual que

<customErrors mode="On" defaultRedirect="/trouble"> 
    <error statusCode="404" redirect="/notfound" /> 
</customErrors> 

Mi primer intento de una ActionResult que trata de añadir este no funciona.

public class NotFoundResult : ActionResult { 
    public NotFoundResult() { 

    } 

    public override void ExecuteResult(ControllerContext context) { 
     context.HttpContext.Response.TrySkipIisCustomErrors = false; 
     context.HttpContext.Response.StatusCode = 404; 
    } 
} 

Pero esto sólo muestra una página en blanco y no mi/no encontrado páginas

:(

¿Qué debo hacer?

Respuesta

128

ASP.NET MVC 3 introdujo la acción HttpNotFoundResult resultado que se debe usar con preferencia a lanzar manualmente la excepción con el código de estado http. Esto también se puede devolver a través del método Controller.HttpNotFound en el controlador:

public ActionResult MyControllerAction() 
{ 
    ... 

    if (someNotFoundCondition) 
    { 
     return HttpNotFound(); 
    } 
} 

Antes de MVC 3 que tenía que hacer lo siguiente:

throw new HttpException(404, "HTTP/1.1 404 Not Found"); 
+1

Had para degradar esto porque uno no debería estar haciendo esto a mano. Use el método del controlador HttpNotFound como se muestra en otra respuesta. – xanadont

+8

Es cierto, pero HttpNotFound se introdujo en ASP.NET MVC 3. Esta pregunta (y mi respuesta) es anterior a esa y fue un enfoque apropiado en versiones anteriores. Ahora edité mi respuesta para ilustrar el enfoque más nuevo que se prefiere en MVC3. –

+4

Rad. Votaste tu copia de seguridad. – xanadont

Cuestiones relacionadas