यदि मैं मैन्युअल रूप से Response.StatusCode सेट करता हूं, तो IIS मेरी प्रतिक्रिया सामग्री को ओवरराइड कर रहा है


20

मुसीबत

जब मैं HTTP Statusअपनी प्रतिक्रिया स्ट्रीम को मैन्युअल रूप से सेट करता हूं, तो, 404या 503, IIS मेरे कस्टम दृश्य के बजाय स्टॉक IIS सामग्री / दृश्य प्रस्तुत करता है।

जब मैं वेब डेवलपमेंट सर्वर (AKA। Cassini ) के साथ ऐसा करता हूं, तो यह सही तरीके से काम करता है (अर्थात, मेरी सामग्री प्रदर्शित होती है और response.statuscode== मेरा दर्ज डेटा)।

क्या कोई तरीका है जिससे मैं इस व्यवहार को ओवरराइड कर सकता हूं?

कैसे करें पुनरावृत्ति

एक डिफ़ॉल्ट ASP.NET MVC1 वेब एप्लिकेशन बनाएं। निम्न मार्ग जोड़ें

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",
        "{*catchall}",
        new { controller = "Home", action = "Index" }
        );

}

अब होमकंट्रोलर की इंडेक्स विधि के साथ बदलें ...

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        Response.StatusCode = 404;
        return View();
    }
}

जवाबों:


18

ठीक है - जवाब मिला। जैसा कि मुझे उम्मीद थी, आईआईएस मेरी गैर 200 प्रतिक्रियाओं को हाइजैक कर रहा है। निश्चित नहीं है (यानी मुझे विश्वास नहीं है कि यह डिफ़ॉल्ट व्यवहार है या यह सेटिंग के कारण टीम के सदस्यों में से एक है, जो मशीन कॉन्फ़िगरेशन, आदि में अपडेट किया गया है ...)।

वैसे भी, यहाँ कुंजी को गैर-200 स्थिति परिणाम संसाधनों को संभालने के लिए IIS नहीं बताया गया है ।

कैसे? Web.config में प्रवेश को कॉन्फ़िगर करें।

<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/>
    .... snipped other IIS relevant elements ... 
</system.webServer>

अब, यहाँ कुंजी है existingResponse="PassThrough"। अगर वह HTTP स्टेटस कोड! = 200 है तो वह बुरा लड़का IIS को मेरे संसाधनों को छोड़ने के लिए कहता है।

अधिक जानकारी चाहते हैं? सुनिश्चित करें कि: इस तत्व सरकारी आईआईएस वेबसाइट पर के बारे में अधिक पढ़ें


httpErrors त्रुटि पृष्ठों की तरह है -> 500 -> फीचर सेटिंग संपादित करें -> "विस्तृत त्रुटियाँ" ? _http: //stackoverflow.com/questions/2640526/detailed-500-error-mageage-asp-iis-7-5_
Kiquenet

आआआह्ह्ह्ह .. गुड ऑल 'आईआईएस आसान काम आसान कर रहा है :)
एआर

4

इसे बायपास करने का दूसरा तरीका यह है कि आप अपने ASP एप्लिकेशन में निम्न कोड चलाएं:

Response.TrySkipIisCustomErrors = true;

स्रोत: /programming//a/21271085/238753


-2

उस दृष्टिकोण के साथ सामान्य रूप से लापरवाह रहें। आपको 404 स्थिति पर दृश्य प्रस्तुत नहीं करना चाहिए।

  • मुझे लगता है कि जब एक त्रुटि स्थिति कोड लौटाया जाता है, तो IIS उस स्थिति त्रुटि पृष्ठ को लौटाता है जो इसके साथ पंजीकृत है - प्रसंस्करण से आउटपुट नहीं। तो, आप वहाँ एक HTML पृष्ठ (या एक aspx पृष्ठ के लिए एक लिंक) डाल सकते हैं। http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx में एक अच्छा स्पष्टीकरण है कि त्रुटि पृष्ठ कैसे सेट किया जाए।

  • लेकिन वह असंबद्ध है। डिफ़ॉल्ट रूप से बहुत सारे ब्राउज़र उस आउटपुट को नहीं दिखाते हैं, लेकिन ब्राउज़र में कुछ सेट किया गया है। इसलिए, यदि आप अपने 404 पेज को देखने वाले लोगों पर भरोसा करते हैं - तो ऐसा नहीं हो सकता है। वे 404 पृष्ठ देख सकते हैं जो उनके लिए ब्राउज़र में स्थापित है।


1
मुझे 404 पर एक दृश्य क्यों नहीं प्रस्तुत करना चाहिए? मुझे एक कस्टम पृष्ठ चाहिए, और मेरे पृष्ठ को कुछ तर्क (स्थैतिक html त्रुटि पृष्ठ के बजाय) की आवश्यकता हो सकती है।
शुद्ध। क्रोम

MVC मॉडल को IIS त्रुटि पेज मॉडल के साथ एकीकृत नहीं करता है। यह सरल है। आप उसके लिए IIS मॉडल पर वापस जाने का प्रयास करते हैं। 404 केस के लिए पेज URL रजिस्टर करें। कुछ डायनेमिक पेज वहां रखें - मुझे यकीन नहीं है कि क्या यह वास्तव में एक एमवीसी यूआरएल को वापस इंगित करता है, लेकिन यह 404 पेज के पंजीकरण में शुरू होता है।
टॉमटॉम

गलत। अधिकांश ब्राउज़र 404 HTTP स्थिति के साथ लौटे पृष्ठ की सामग्री को प्रस्तुत करेंगे। सभी नहीं, लेकिन अधिकांश। साथ ही, IIS डिफ़ॉल्ट रूप से .NET साइट में किसी भी कोड द्वारा निर्धारित स्थिति कोड का सम्मान करेगा, जब तक कि कोई अन्य मॉड्यूल उस पाइपलाइन में बाद में ओवरराइड नहीं कर रहे हैं। प्रश्न लेखक का उत्तर देखें कि इस मामले में कैसे हो रहा था।
मुफासा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.