2012-10-31 22 views
5

के साथ एएसपी.नेट एमवीसी कस्टम त्रुटि पेज मेरा प्रश्न शुद्ध है। क्रोम this post का जवाब है। मैंने अपनी विधि का उपयोग करके अपने पृष्ठों के कस्टम त्रुटि संदेशों को लागू करने का प्रयास किया, फिर भी कुछ समस्याएं हैं जिन्हें मैं समझा नहीं सकता।जादुई यूनिकॉर्न

ए) जब मैं स्थानीयहोस्ट: 3001/nonexistantPage जैसे अवैध URL में प्रवेश करके 404 त्रुटि को उत्तेजित करता हूं, तो यह मेरे त्रुटि नियंत्रक के सर्वर त्रुटि() क्रिया को डिफ़ॉल्ट करता है, भले ही इसे NotFound() पर जाना चाहिए।

 
    public class ErrorController : Controller 
    { 
     public ActionResult NotFound() 
     { 
      Response.TrySkipIisCustomErrors = true; 
      Response.StatusCode = (int)HttpStatusCode.NotFound; 
      var viewModel = new ErrorViewModel() 
      { 
       ServerException = Server.GetLastError(), 
       HTTPStatusCode = Response.StatusCode 
      }; 
      return View(viewModel); 
     } 

     public ActionResult ServerError() 
     { 
      Response.TrySkipIisCustomErrors = true; 
      Response.StatusCode = (int)HttpStatusCode.InternalServerError; 

      var viewModel = new ErrorViewModel() 
      { 
       ServerException = Server.GetLastError(), 
       HTTPStatusCode = Response.StatusCode 
      }; 
      return View(viewModel); 
     } 
    } 

Global.asax.cs में मेरे त्रुटि मार्गों:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

     routes.MapRoute(
      name: "Error - 404", 
      url: "NotFound", 
      defaults: new { controller = "Error", action = "NotFound" } 
      ); 

     routes.MapRoute(
      name: "Error - 500", 
      url: "ServerError", 
      defaults: new { controller = "Error", action = "ServerError" } 
      ); 


और मेरे web.config सेटिंग्स:

<system.web> 
    <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/ServerError"> 
    <error statusCode="404" redirect="/NotFound" /> 
</customErrors> 
... 
</system.web> 

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" path="/NotFound" responseMode="ExecuteURL" /> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <error statusCode="500" path="/ServerError" responseMode="ExecuteURL" /> 
</httpErrors> 
... 

त्रुटि विचारों यहाँ मेरी ErrorController है/Views/त्रुटि/NotFound.cshtml और ServerError.cshtml में स्थित हैं।

ख) एक अजीब बात है, जब एक सर्वर त्रुटि तब होती है यह वास्तव में है सर्वर त्रुटि दृश्य मैं परिभाषित प्रदर्शित है,, लेकिन यह भी रूप में अच्छी तरह कह रही है कि त्रुटि पृष्ठ पाया नहीं जा सका एक डिफ़ॉल्ट त्रुटि संदेश आउटपुट।

Here's how it looks like:


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

धन्यवाद!

** संपादित करें: ** मैं त्रुटि/त्रुटि/त्रुटि/त्रुटि/सर्वर त्रुटि प्राप्त करके त्रुटि नियंत्रक के माध्यम से सीधे अपने विचारों पर नेविगेट कर सकता हूं।

विचारों में स्वयं केवल कुछ पाठ, कोई मार्कअप या कुछ भी शामिल नहीं है।

जैसा कि मैंने कहा था, यह वास्तव में किसी भी तरह से काम करता है, न कि जिस तरह से मैं इसे काम करने का इरादा रखता हूं। Web.config में रीडायरेक्ट के साथ कोई समस्या प्रतीत होती है, लेकिन मैं इसे समझने में सक्षम नहीं हूं।

+1

क्या आप भी अपना विचार पोस्ट कर सकते हैं? इस 'ग्लोबल फ़िल्टरर्स' फ़िल्टर को हटाने के लिए भी मत भूलना। (नया हैंडलरर एट्रिब्यूट()); –

+1

क्या आप सीधे अपने 404 पेज पर जा सकते हैं? –

+0

हाँ मैं कर सकता हूँ। यहां समस्या वेब.कॉन्फिग की सेटिंग्स से उत्पन्न होती है, हालांकि मुझे वहां गलती नहीं मिल रही है। – FLClover

उत्तर

0

मुझे यह काम करने के लिए मिला। ऐसा लगता है कि समस्या की मेरी समझ कुछ हद तक गलत थी।

web.config में, मैं निम्नलिखित बदल दिया है:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Views/Error/ServerError.cshtml"> 
    <error statusCode="404" redirect="~/Views/Error/NotFound.cshtml" /> 
</customErrors> 

... और ...

<httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" path="/NotFound" responseMode="ExecuteURL" /> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <error statusCode="500" path="/ServerError" responseMode="ExecuteURL" /> 
    </httpErrors> 

यह सीधे विचारों पर रीडायरेक्ट। मेरी समझ यह थी कि मुझे त्रुटि नियंत्रक पर रीडायरेक्ट करना पड़ा जो बदले में विचारों पर रीडायरेक्ट करेगा, लेकिन स्पष्ट रूप से यह मामला नहीं था। मैं आपकी टिप्पणियों के लिए धन्यवाद देना चाहता हूं क्योंकि उन्होंने मुझे फिर से समस्या का विश्लेषण करने के लिए तैयार किया है जब मैं पहले से ही कस्टम त्रुटि सामान को खोने के बारे में था और बस आलसी हो और वाईएसओडी प्रदर्शित करता हूं। :)

2

उस सेटअप के साथ एक और समस्या है, जब आपके पास अधिक जटिल मार्ग होते हैं और कई सेगमेंट पूर्व होते हैं।

http://localhost:2902/dsad/dadasdmasda/ddadad/dadads/ddadad/dadadadad/ 

मुझे मिल गया सर्वर त्रुटि ->

Sorry, an error occurred while processing your request. 


Exception: An error occured while trying to Render the custom error view which you provided, for this HttpStatusCode. ViewPath: ~/Views/Error/NotFound.cshtml; Message: The RouteData must contain an item named 'controller' with a non-empty string value. 
Source: 

कि के लिए मेरे समाधान डिफ़ॉल्ट मार्ग

 routes.MapRoute(
      "Default Catch all 404", 
      "{controller}/{action}/{*catchall}", 
      new { controller = "Error", action = "NotFound" } 
     ); 

आशा है कि यह किसी की मदद कर सकता है के बाद अंत में अतिरिक्त रूट जोड़ने के लिए था :-)

+0

आप सही हैं। मैं इसे अपने मार्गों में भी शामिल करूंगा। धन्यवाद! – FLClover

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