2008-09-20 6 views

Antwort

20

http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx gibt die folgende Erklärung:

eine Wildcard Routing-Regel als letzte Regel hinzufügen:

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

Jede Anfrage, die nicht eine andere Regel passt auf die Http404 Wirkung des Fehler Controller geleitet wird , die Sie auch konfigurieren müssen:

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

Nur ein FYI, der oben verlinkten Beitrag zurückgibt 404 (oh, die Ironie). Die neue Adresse ist: http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx –

+4

Das einzige Problem hier ist, dass so viel zu den typischen/{ Controller}/{Aktion}/{ID} Route. Um das Problem zu umgehen, habe ich explizit alle meine Routen definiert und beseitigt. –

+4

Leider funktioniert der Link nicht. Auch http://jason.whitehorn.ws/ ist nicht zugänglich: | – stej

9

Sie können HandleUnknownAction in Ihrem Controller auch in den Fällen überschreiben, in denen Eine Anfrage stimmt zwar mit einem Controller überein, passt jedoch nicht zu einer Aktion. Die Standardimplementierung löst einen 404-Fehler aus.

+0

Gute Idee. Sehen Sie sich diese Lösung an, die eine 'HandleUnknownAction'-Überschreibung enthält: http://StackOverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc/2577095#2577095 –

4

Neue HttpException auslösen (404, "Resource Not Found");

0

Mit MVC 3 Sie können HttpNotFound zurückkehren(), um richtig einen 404.

Like this zurück:

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

    fontName = HttpUtility.UrlDecode(fontName); 

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

    return View(font); 
}