2012-12-07 10 views
15

मैं नीचे दी गई कार्यक्षमता कैसे प्राप्त करूं?एएसपीनेट एमवीसी व्यू के साथ 404 कैसे वापस करें

मेरे controler:

if (something == null) 
{   
    //return the view with 404 http header 
    return View();   
} 

    //return the view with 200 http header 
    return View(); 
+0

404 के साथ दृश्य को वापस करने का कोई मतलब नहीं है। 404 पेज के लिए स्टेटस कोड नहीं मिला है। एक पृष्ठ भी वापस करने के लिए बस सादा अजीब है। यदि आप ऐसा करते हैं तो ब्राउज़र असंगतता की अपेक्षा करें। – Liam

उत्तर

18

बस दृश्य लौटने से पहले लिखना

Response.StatusCode = 404; 

+4

जैसा ही है, यह ठीक है' कवर HttpNotFound(); 'कवर के अंतर्गत करता है। यह वर्तमान HttpContext प्रतिक्रिया में 404 स्टेटसोड और स्टेटस डिस्क्रिप्शन जोड़ता है। – levelnis

+0

@levelnis अंतर यह है कि यह आदेश 'वापसी' जैसे फ़ंक्शन को समाप्त नहीं करता है। वैसे: एलन लो का जवाब बिल्कुल मेरे जैसा ही है, और इसके लिए एक कारण हो सकता है ... – fero

+1

उत्तर के लिए धन्यवाद! यह वास्तव में मेरे आवश्यकताओं के अनुरूप के लिए, मैं अपने वेब config के लिए निम्नलिखित जोड़ने के लिए किया था: <निकालें statusCode = "404" /> user1615362

0
if (something == null) 
{   
    return HttpNotFound(); 
} 

return View(); 
+0

उपर्युक्त के साथ, आप ध्यान दें कि दृश्य यहां वापस नहीं किया गया है। –

9
if (something == null) 
{   
    return new HttpNotFoundResult(); // 404 
} 
else 
{ 
    return new HttpStatusCodeResult(HttpStatusCode.OK); // 200 
} 
+1

सवाल यह नहीं है कि 404 कैसे वापस किया जाए, लेकिन उसी पृष्ठ को 404 http शीर्षलेख के साथ कैसे वापस किया जाए। – user1615362

+2

यदि आप इसके बारे में सोचते हैं, तो वेब सर्वर के लिए हर अनुरोध बस एक स्टेटस कोड के साथ प्रतिक्रिया देता है। यदि स्टेटस कोड 200 है, तो आमतौर पर इसके साथ कुछ एचटीएमएल होता है जिसे हम एक पेज के रूप में सोचते हैं, लेकिन यह केवल एक स्टेटस कोड है जहां तक ​​सर्वर का संबंध है, चाहे वह 200, 404, आदि – levelnis

+0

एफवाईआई 'नया एम्प्टी रीसेट() ' 'नया HttpStatusCodeResult (HttpStatusCode.OK) ' –

7
if (something == null) 
{   
    Response.StatusCode = (int)HttpStatusCode.NotFound; 
    return View();   
} 

//return the view with 200 http header 
return View(); 
+1

तो, पहला 'वापसी' क्यों है, क्योंकि दूसरा भी वापस आ जाएगा। –

+0

इस उदाहरण में, मैं सहमत हूं, केवल अंतिम वापसी की आवश्यकता होगी। हालांकि मैंने एक धारणा बनाई है कि शून्य जांच के बाद कुछ अतिरिक्त कोड हो सकते हैं जो 'कुछ' शून्य नहीं होने पर केवल प्रासंगिक होगा। –

+0

जैसा कि मैंने [प्रश्न पर कहा है] (https://stackoverflow.com/questions/13764685/how-to-return-404-with-asp-net-mvc-view#comment80368073_13764685) एक दृश्य लौटा रहा है और 404 विचित्र व्यवहार है। मैं ऐसा करने की अनुशंसा नहीं करता (भले ही ओपी ने इसके लिए पूछा हो) – Liam

0

मैं 404 अपवाद फेंक दूंगा और कस्टम अपवाद फ़िल्टर तैयार करूंगा जो 404 त्रुटियों के लिए कोई पृष्ठ नहीं मिला है। अंतर्निहित HandleError फ़िल्टर 404 त्रुटियों को संभाल नहीं करता है।

if (something == null) 
{   
    throw new HttpException(404, "Not found") 
} 

return View(); 
2

आप true रूप Response की TrySkipIisCustomErrors संपत्ति स्थापित करना चाहिए।

public ActionResult NotFound() 
{ 
    Response.StatusCode = 404; 
    Response.TrySkipIisCustomErrors = true; 
    return View(); 
} 
+0

मेरे परिदृश्य के लिए सबसे अच्छा जवाब है क्योंकि यह सर्वर को ले जाने और डिफ़ॉल्ट 404 प्रतिक्रिया प्रदर्शित करने के बजाय आपको मनमानी दृश्य वापस करने की अनुमति देता है – rdans

संबंधित मुद्दे