2011-02-11 15 views
10

मैं हाल ही में मेरी MVC3 परियोजना के लिए माइक्रोसॉफ्ट एकता जोड़ दिया है और अब मैं इस त्रुटि हो रही है:समस्या

The controller for path '/favicon.ico' could not be found or it does not implement IController.

मैं वास्तव में एक favicon.ico की जरूरत नहीं है तो मुझे पता नहीं कहाँ है वह आ रहा है और सबसे अजीब चीज यह है कि दृश्य वास्तव में प्रस्तुत किया जा रहा है और फिर यह त्रुटि फेंक दी जा रही है ... मुझे यकीन नहीं है कि यह मेरे नियंत्रक फैक्ट्री क्लास में कुछ गड़बड़ है क्योंकि मुझे कुछ ट्यूटोरियल से कोड मिला है (मैं आईओसी नहीं हूं - यह पहली बार है जब मैं ऐसा करता हूं)। यहां कोड है:

पब्लिक क्लास यूनिटी कंट्रोलर फैक्टरी: डिफॉल्ट कंट्रोलर फैक्टरी { IUnityContainer कंटेनर;

public UnityControllerFactory(IUnityContainer _container) 
{ 
    container = _container; 
} 

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
{ 
    IController controller; 

    if(controllerType == null) 
     throw new HttpException(404, string.Format("The controller for path '{0}' could not be found or it does not implement IController.", 
      requestContext.HttpContext.Request.Path)); 

    if(!typeof(IController).IsAssignableFrom(controllerType)) 
     throw new ArgumentException(string.Format("Type requested is not a controller: {0}", 
                  controllerType.Name), 
                  "controllerType"); 
    try 
    { 
     controller = container.Resolve(controllerType) as IController; 
    } 
    catch (Exception ex) 
    { 
     throw new InvalidOperationException(String.Format(
           "Error resolving controller {0}", 
           controllerType.Name), ex); 
    } 
    return controller; 
} 

}

कोई सुझाव?

अग्रिम धन्यवाद!

उत्तर

29

इसका आपके नियंत्रक कारखाने के साथ विशेष रूप से कुछ लेना देना नहीं है, लेकिन यह ऐसा कुछ है जिसे आप आसानी से संबोधित कर सकते हैं।

यदि आप वेबकिट ब्राउज़र (क्रोम विशेष रूप से, सफारी भी मुझे लगता है) का उपयोग कर रहे हैं, तो किसी भी वेबसाइट के लिए अनुरोध स्वचालित रूप से '/favicon.ico' के अनुरोध के साथ होगा। ब्राउज़र आपकी वेबसाइट के साथ शॉर्टकट आइकन ढूंढने का प्रयास कर रहा है और (किसी भी कारण से) डिफ़ॉल्ट शॉर्टकट आइकन के लिए पथ को '/favicon.ico' मानकीकृत किया गया है।

त्रुटि आप हो रही है से बचने के लिए, बस अपने MVC वेब अनुप्रयोग के अनुमार्गण तालिका के भीतर एक IgnoreRoute() को परिभाषित:

RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" }); 

यह सुनिश्चित होगा कि किसी भी अनुरोध '/favicon.ico' (करने के लिए या '/favicon.gif') एमवीसी द्वारा संभाला नहीं जाएगा।

+0

धन्यवाद एक बहुत नाथन! वास्तव में यह किया :) – Kassem

+0

@ Kassem: इसे सुनकर खुशी हुई:] –

+1

मैंने इस कोड का इस्तेमाल ग्लोबल.एक्सएक्स में किया था और अब मुझे क्रोम में "फ़ाइल मौजूद नहीं है" अपवाद मिलता है। – Lifes

0

मैं इस रूप में अच्छी तरह से किया देखा है:

catch (Exception ex) 
{ 
    /*throw new InvalidOperationException(String.Format(
          "Error resolving controller {0}", 
          controllerType.Name), ex);*/ 
    base.GetControllerInstance(requestContext,controllerType); 
}