What is the proper way to send an HTTP 404 response from an ASP.NET MVC action? -


यदि मार्ग दिया गया है:

{FeedName} / {itemPermalink}

ex: / ब्लॉग / हैलो-वर्ल्ड

यदि आइटम मौजूद नहीं है, तो मुझे 404 वापस करना है। एएसपी.नेट एमवीसी में ऐसा करने का सही तरीका क्या है ?

कूल्हे से शूटिंग (काउबॉय कोडिंग ;-)), मैंने ऐसा कुछ सुझाव दिया था:

नियंत्रक:

  पब्लिक क्लास होम कंट्रोलर: कंट्रोलर {पब्लिक एक्शन रिजल्ट इंडेक्स () {नया एचटीटीपी नॉटफौल्ड रिजल्ट ("यह मौजूद नहीं है") ; }}  

HttpNotFoundResult:

  सिस्टम का उपयोग कर; System.Net का उपयोग कर; System.Web का उपयोग कर; System.Web.Mvc का उपयोग कर; नामस्थान आपके नामस्थान Here {/// & lt; सारांश & gt; का कार्यान्वयन & lt; देखें cref = "ActionResult" / & gt; जो एक & lt; फेंकता cref = "HttpException" />.</summary> सार्वजनिक वर्ग HttpNotFoundResult: ActionResult {/// & lt; सारांश & gt; एक नया उदाहरण शुरू करता है; & lt; cref = "HttpNotFoundResult" / & gt; निर्दिष्ट & lt; paramref नाम = "संदेश" / & gt;। & Lt; / summary & gt; /// & lt; param नाम = "संदेश" & gt; & lt; / param & gt; सार्वजनिक एचटीटीपीनोटफ़ाउंड रिजल्ट (स्ट्रिंग मेसेज) {this.Message = message; } /// & lt; सारांश & gt; एक नया उदाहरण प्रारंभ करता है & lt; देखें cref = "HttpNotFoundResult" / & gt; खाली संदेश के साथ। & Lt; / सारांश & gt; सार्वजनिक एचटीटीपीनोटफ़ाउंड रेसल्ट (): यह (स्ट्रिंग.एप्टी) {} /// & lt; सारांश & gt; संदेश भेजता है या फेंक दिया जाता है जो इसे भेजता है; & lt;; cref = "HttpException" />./lt;/summary> देखें; सार्वजनिक स्ट्रिंग संदेश {get; सेट; } /// & lt; सारांश & gt; आधार को ओवरराइड & lt; देखें cref = "ActionResult.ExecuteResult" / & gt; एक & lt; फेंकने की कार्यक्षमता cref = "HttpException" />.</summary> सार्वजनिक ओवरराइड शून्य ExecuteResult (नियंत्रक संदर्भ संदर्भ) {नया एचटीटीपीएक्सेप्शन ((इंट 32) एचटीटीपीटीटास कोड। नॉटफॉउड, यह। संदेश); }}} // एरिक वैन ब्रैकेल द्वारा, डैनियल शैफ़र के संपादनों के साथ :)  

इस दृष्टिकोण का उपयोग करके आप ढांचे मानकों का अनुपालन करते हैं। वहां पहले से ही एक एचटीटीपी यूनाधिकृत परिणाम है, इसलिए यह आपके डेवलपर को बाद में आपके कोड को बनाए रखने की आंखों में ढांचा का विस्तार करेगा (आप जानते हैं, जो मनोविज्ञान जानता है कि आप कहां रहते हैं)।

आप परावर्तक का इस्तेमाल कर सकते हैं एचटीटीपीयूनाइज्ड रिजल्ट कैसे हासिल किया जाता है यह देखने के लिए विधानसभा को देखने के लिए, क्योंकि मुझे नहीं पता कि यह तरीका कुछ भी याद करती है (यह लगभग बहुत आसान लगता है)।


मैंने परामर्शक का इस्तेमाल किया HttpUnauthorizedResult पर एक नज़र अभी अभी ऐसा लगता है कि वे 0x191 (401) की प्रतिक्रिया पर स्टेटस कोड सेट कर रहे हैं। यद्यपि यह 401 के लिए काम करता है, नए मान के रूप में 404 का इस्तेमाल करते हुए मुझे लगता है कि फ़ायरफ़ॉक्स में सिर्फ एक खाली पृष्ठ मिल रहा है। इंटरनेट एक्सप्लोरर एक डिफ़ॉल्ट 404 दिखाता है (एएसपी.NET संस्करण नहीं)। वेब डेवलपर टूलबार का उपयोग करके मैंने एफएफ में हेडर का निरीक्षण किया, जो DO 404 नहीं मिला प्रतिसाद दिखाता है। ऐसा कुछ हो सकता है जिसे मैं एफएफ में गलत तरीके से कॉन्फ़िगर किया।


यह कहा जा रहा है, मुझे लगता है कि जेफ का दृष्टिकोण कीस का एक अच्छा उदाहरण है यदि आपको वास्तव में इस नमूने में शब्दशः आवश्यकता नहीं है, तो उसकी विधि भी ठीक काम करती है।


Comments