2011-08-25 4 views
12

का उपयोग करते समय, रीडायवर के बिना 404 फेंकना, मुझे एक और प्रश्न मिला, जिसने मेरे प्रश्न के पहले भाग का समाधान प्रदान किया, यानी रीडायरेक्टिंग के बिना एएसपी.नेट एमवीसी में 404 पेज कैसे उत्पन्न करें दूसरे पृष्ठ पर (इसलिए मूल रूप से अनुरोध किया गया यूआरएल पता बार में रहता है)।IOCControllerFactory

ASP.NET MVC - How to throw a 404 page similar to that on StackOverflow

protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = Server.GetLastError(); 

     Response.Clear(); 
     var httpException = exception as HttpException; 
     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "Error"); 

     if (httpException != null) 
     { 
      routeData.Values.Add("action", httpException.GetHttpCode() == 404 ? "NotFound" : "Unknown"); 

      // clear the error, otherwise, we will always get the default error page. 
      Server.ClearError(); 

      // call the controller with the route 
      IController errorController = new ErrorController(); 
      errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 

     } 
    } 

चीजों में से 404 की ओर से मेरे लिए ठीक काम करता है अगर मैं के रूप में मैं कर एक IOCControllerFactory का उपयोग नहीं करते, लेकिन जैसे ही एक कारखाने का उपयोग करें, global.asax में त्रुटि कोड नहीं है इस्तेमाल किया और इसके बजाय मैं निम्न त्रुटि:

The IControllerFactory 'MyNamespace.IOCControllerFactory' did not return a controller for the name 'blah'.

मैं इस के आसपास मिलता है, मेरे contr से प्रत्येक के लिए मेरी controllerfactory से छुटकारा पाने का सहारा है, और बनाने के लिए एक parameterless निर्माता के बिना ollers?

+0

सी [इस पोस्ट] (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvc/7967759#7967759) है, जो ASP.Net MVC फ़िल्टर विशेषताओं का उपयोग कर कस्टम 404 त्रुटि पृष्ठ समाधान का एक उदाहरण है। यह समाधान ब्राउज़र को 302/200 संदेशों से भी बचाता है। ब्राउज़र को 404 प्रतिक्रिया मिलती है। –

उत्तर

12

एएसपी.नेट can do यह ओओटीबी (3.5 से शुरू)। <CustomErrors> तत्व पर जोड़ें: redirectMode=ResponseRewrite

अद्यतन

मैं गलत कोड दर्ज किया। यह आईआईएस 7 है जो इसे संभालता है।

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" /> 
     <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" /> 
    </httpErrors> 
<system.webServer> 
+0

दुर्भाग्यवश, केवल वेब रूपों के बावजूद यह एमवीसी के तहत काम नहीं करता है। मुझे इस पर एक और लेख मिला और कोशिश की लेकिन एमवीसी के लिए कोई खुशी नहीं :( – marcusstarnes

+0

मैंने जो कोड पोस्ट किया है वह मेरी अपनी एएसपी.नेट एमवीसी परियोजनाओं में से एक था। ठीक काम करता है :) आईआईएस 7 का उपयोग करके इसका परीक्षण किया गया है। आपने किस वेबसर्वर के साथ परीक्षण किया ? मुझे यकीन नहीं है कि यह देव में निर्मित विजुअल स्टूडियो के साथ काम करेगा। सर्वर। –

+0

मैंने अभी उपरोक्त के रूप में इस अद्यतन कोड को आजमाया है (सिस्टम.web सेक्शन में अतिरिक्त कस्टमर अनुभाग के साथ और बिना) लेकिन दुर्भाग्यवश कोई सफलता नहीं है। जब मैं अपने कस्टम त्रुटि पृष्ठ की बजाय एक त्रुटि मारा, तो मुझे वास्तव में 403 वर्जित हो रहा है। जब मैंने system.web सेक्शन में एक अतिरिक्त कस्टमर अनुभाग जोड़ा, तो उसने 403 भी दिए लेकिन एसएसएल (?!) का उल्लेख किया, लेकिन मेरी आईआईएस 7 कॉन्फ़िगरेशन की जांच कर रहा है, मेरे पास इस वेब एप्लिकेशन में से किसी के लिए एसएसएल चालू नहीं है। उलझन में! – marcusstarnes