2008-09-20 25 views

Respuesta

20

http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx da la siguiente explicación:

Añadir una regla de enrutamiento comodín como su regla final:

routes.MapRoute("Error", 
       "{*url}", 
       new { controller = "Error", action = "Http404" }); 

Cualquier solicitud que no coincide con otra regla va a parar a la acción Http404 del controlador de error , que también es necesario para configurar:

public ActionResult Http404(string url) { 
    Response.StatusCode = 404; 
    ViewData["url"] = url; 
    return View(); 
} 
+16

Como digo, El mensaje vinculado anteriormente devuelve un 404 (oh la ironía). La nueva dirección es: http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx –

+4

El único problema aquí es que tanto coincide con el típico/{ controlador}/{acción}/{id} ruta. Para evitar el problema, definí explícitamente todas mis rutas y me deshice de él. –

+4

Desafortunadamente, el enlace no funciona. Incluso http://jason.whitehorn.ws/ no es accesible: | – stej

9

también puede anular HandleUnknownAction dentro de su controlador en los casos en una solicitud no coincide con un controlador, pero no coincide con una acción. La implementación predeterminada genera un error 404.

+0

Buena idea. Vea esta solución que incorpora una anulación de 'HandleUnknownAction': http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc/2577095#2577095 –

4

throw new HttpException (404, "Recurso no encontrado");

0

Con MVC 3 puede volver HttpNotFound() para devolver correctamente un 404.

De esta manera:

public ActionResult Download(string fontName) 
{ 
    FontCache.InitalizeFonts(); 

    fontName = HttpUtility.UrlDecode(fontName); 

    var font = FontCache.GetFontByName(fontName); 
    if (font == null) 
     return HttpNotFound(); 

    return View(font); 
} 
Cuestiones relacionadas