2011-06-09 4 views
24

मैं अपने वेब एप्लिकेशन के लिए कस्टम 404 त्रुटि पृष्ठ सेट करने का प्रयास कर रहा हूं। समस्या यह है कि यह एप्लिकेशन कई अलग-अलग वातावरणों पर तैनात किया जाएगा। कभी-कभी यह वर्चुअल निर्देशिका में होगा और कभी-कभी यह नहीं होगा।आईआईएस 7 में एक कस्टम त्रुटि पेज सेट करते समय एक सापेक्ष पथ का उपयोग करना संभव है?

मैं नाम वाली निर्देशिका ErrorPages में त्रुटि पृष्ठ है और इस तरह मेरी config की स्थापना की है:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

मुसीबत है जब मैं एक वेब साइट की जड़ को यह तैनात, /VirtualDir भाग करने की जरूरत है हटाया जाना। यदि मैं इसे तैनाती से पहले हटा देता हूं तो मुझे वर्चुअल निर्देशिका पर तैनाती करते समय इसे वापस जोड़ना होगा। क्या कोई तरीका है कि मैं वर्चुअल निर्देशिका के सापेक्ष होने के लिए पथ सेट कर सकता हूं और साइट पर नहीं?

मैं एक ~ उपयोग करने की कोशिश की है, लेकिन है कि या तो काम नहीं करता है, इस तरह:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="~/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 
+3

ऐसा लगता है कि कम जवाब है: कोई यह जब IIS7 में एक परिष्कृत त्रुटि पृष्ठ की स्थापना एक सापेक्ष पथ का उपयोग करना संभव नहीं है! –

+0

मार्टिन, मैं आपको विश्वास करता हूं, लेकिन क्या आपके पास उद्धरण है? – Michael

+3

@ माइकल [यह लिंक] (http://www.iis.net/configreference/system.webserver/httperrors/error#005) कहता है कि यूआरएल एक सर्वर रिश्तेदार यूआरएल होना चाहिए, न कि प्रतिक्रिया प्रतिक्रिया का उपयोग करते समय एक एप्लीकेशन सापेक्ष यूआरएल = "ExecuteURL" '। – WolfyUK

उत्तर

2

मैं इसी तरह की समस्या का सामना करना पड़ रहा था, इसलिए मैं गतिशील रूप से उत्पन्न यूआरएल के साथ CustomError पृष्ठ पर रीडायरेक्ट करने के लिए सर्वर साइड कोड का इस्तेमाल किया (वर्चुअल निर्देशिका के साथ या उसके बिना) हालांकि ~/सफलतापूर्वक यहां से पथ को सही करने के लिए पुनर्निर्देशित करें।

आवेदन Application_Error आग में एक त्रुटि उत्पन्न होती है और अंत में इस कोड को ब्लॉक निकाल दिया जाता है:

if (App.Configuration.DebugMode == DebugModes.ApplicationErrorMessage) 
{      
    string stockMessage = App.Configuration.ApplicationErrorMessage; 

    // Handle some stock errors that may require special error pages 
    HttpException httpException = serverException as HttpException; 
    if (httpException != null) 
    { 
     int HttpCode = httpException.GetHttpCode(); 
     Server.ClearError(); 

     if (HttpCode == 404) // Page Not Found 
     { 
      Response.StatusCode = 404; 
      Response.Redirect("~/ErrorPage.aspx"); // ~ works fine no matter site is in Virtual Directory or Web Site 
      return; 
     } 
    } 

    Response.TrySkipIisCustomErrors = true; 
    Response.StatusCode = 404; 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 

इसके बजाय आप httpErrors में web.config की धारा पेज पथ लिखने की यदि आप किसी एप्लिकेशन सेटिंग बना सकते हैं और पथ को बचा सकता है क्या आप वहां मौजूद हैं। आपके पीछे दिए गए कोड में ऊपर दिए गए वर्णन के रूप में ऐप सेटिंग और रीडायरेक्ट से पथ प्राप्त हो सकता है।

मैं एक और इसी तरह लिंक मिल गया और वह बेहतर की तुलना में मेरे तो बस हालांकि यह http://labs.episerver.com/en/Blogs/Ted-Nyberg/Dates/112276/2/Programmatically-configure-customErrors-redirects/

4

आप web.config इस्तेमाल कर सकते हैं रूपांतरण पर्यावरण प्रति पथ सेट करने के लिए जाने के बारे में बताया:

वेब। config

<httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404"/> 
    <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

web.Release.config

<httpErrors> 
    <error statusCode="404" path="/ErrorPages/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 
संबंधित मुद्दे