2011-02-11 22 views
10

he añadido recientemente Microsoft Unidad a mi proyecto MVC3 y ahora estoy recibiendo este error:Problema con la fábrica controlador personalizado

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

realmente no tienen un favicon.ico así que no tengo idea de dónde eso viene de. Y lo más extraño es que la vista se está renderizando y ENTONCES se está produciendo este error ... No estoy seguro de si algo falla en mi clase de controlador de fábrica porque obtuve el código de algún tutorial (no estoy en IoC - esta es la primera vez que hago eso). Aquí está el código:

public class UnityControllerFactory: DefaultControllerFactory { IUnityContainer container;

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; 
} 

}

¿Alguna sugerencia?

¡Gracias de antemano!

Respuesta

29

Esto no tiene nada que ver específicamente con su fábrica de controladores, pero es algo que puede abordar fácilmente.

Si está utilizando un navegador Webkit (específicamente Chrome, Safari, creo), una solicitud a cualquier sitio web se acompañará automáticamente con una solicitud a '/favicon.ico'. El navegador está intentando encontrar un ícono de acceso directo para acompañar a su sitio web y (por cualquier razón) la ruta predeterminada para los iconos de acceso directo se ha estandarizado para que sea '/favicon.ico'.

Para evitar el error que está recibiendo, sólo tiene que definir un IgnoreRoute() dentro de la tabla de enrutamiento de la aplicación web MVC:

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

Esto asegurará que cualquier solicitud de '/favicon.ico' (o '/favicon.gif') no será manejado por MVC.

+0

Muchas gracias Nathan! Eso realmente lo hizo :) – Kassem

+0

@Kassem: Me alegra oírlo:] –

+1

Utilicé este código en Global.asax y ahora aparece la excepción "El archivo no existe" en Chrome. – Lifes

0

he visto este hecho así:

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