2008-09-20 17 views
19

मैं अपवाद 500 त्रुटि कोड फेंकने के ढांचे के बिना 404 त्रुटियों को कैसे संभाला जा सकता हूं?404 एचटीपी त्रुटि हैंडलर Asp.Net एमवीसी (आरसी 5)

अपने अंतिम नियम के रूप में एक वाइल्डकार्ड रूटिंग नियम जोड़ें:

उत्तर

20

http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx निम्नलिखित विवरण देता है

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

किसी भी अनुरोध है कि एक और नियम से मेल नहीं खाता त्रुटि नियंत्रक के Http404 कार्रवाई करने के लिए कराई हो जाता है

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

बस एक FYI करें, ऊपर लिंक पोस्ट 404 (ओह विडंबना) लौटा रहा है। नया पता है: http://jason.whitehorn.ws/2008/06/17/Friendly-404-Errors-In-ASPNET-MVC.aspx –

+4

यहां एकमात्र समस्या यह है कि ठेठ/{ नियंत्रक}/{कार्रवाई}/{आईडी} मार्ग। समस्या को हल करने के लिए, मैंने स्पष्ट रूप से अपने सभी मार्गों को परिभाषित किया और इससे छुटकारा पा लिया। –

+4

दुर्भाग्य से लिंक काम नहीं करता है। यहां तक ​​कि http://jason.whitehorn.ws/ पहुंच योग्य नहीं है: | – stej

9

तुम भी ऐसे मामलों में जहां में अपने नियंत्रक के भीतर HandleUnknownAction ओवरराइड कर सकते हैं: है, जो आप भी विन्यस्त करने की जरूरत एक अनुरोध नियंत्रक से मेल खाता है, लेकिन एक कार्रवाई से मेल नहीं खाता है। डिफ़ॉल्ट कार्यान्वयन 404 त्रुटि उठाता है।

+0

अच्छा विचार। इस समाधान को देखें जिसमें 'हैंडल अज्ञात एक्शन' ओवरराइड शामिल है: http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc/2577095#2577095 –

4

नया एचटीपीएक्सप्शन फेंक दें (404, "संसाधन नहीं मिला");

0

MVC 3 के साथ आप HttpNotFound() लौट सकते हैं ठीक से एक 404.

इस तरह वापस जाने के लिए:

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

    fontName = HttpUtility.UrlDecode(fontName); 

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

    return View(font); 
} 
संबंधित मुद्दे