10 votes

Problème avec l'usine de contrôleurs personnalisés

J'ai récemment ajouté Microsoft Unity à mon projet MVC3 et j'obtiens maintenant cette erreur :

Le contrôleur du chemin '/favicon.ico' n'a pas pu être trouvé ou n'implémente pas IController.

Je n'ai pas vraiment de favicon.ico, donc je ne sais pas d'où cela vient. Et le plus étrange, c'est que la vue est effectivement rendue et qu'ensuite cette erreur est lancée... Je ne suis pas sûr qu'il y ait un problème avec ma classe de fabrique de contrôleur car j'ai obtenu le code à partir d'un tutoriel (je ne suis pas à IoC - c'est la première fois que je le fais). Voici le code :

public class UnityControllerFactory : DefaultControllerFactory { IUnityContainer conteneur ;

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

}

Des suggestions ?

Merci d'avance !

29voto

Nathan Taylor Points 13582

Cela n'a rien à voir avec votre usine de contrôleurs spécifiquement, mais c'est quelque chose que vous pouvez facilement résoudre.

Si vous utilisez un navigateur Webkit (Chrome en particulier, Safari aussi - je pense), une requête vers un site web sera automatiquement accompagnée d'une requête vers '/favicon.ico'. Le navigateur tente de trouver une icône de raccourci pour accompagner votre site web et (pour une raison ou une autre) l'icône "/favicon.ico" n'est pas disponible. par défaut Le chemin d'accès aux icônes de raccourci a été normalisé pour devenir '/favicon.ico'.

Pour éviter l'erreur que vous obtenez, il suffit de définir une fonction IgnoreRoute() dans la table de routage de votre application Web MVC :

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

Ainsi, toute requête vers '/favicon.ico' (ou '/favicon.gif') ne sera pas traitée par MVC.

0voto

Travis J Points 28588

J'ai également vu cela se faire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X