53 votes

J'obtiens une erreur "Does not implement IController" sur les images et robots.txt dans MVC2.

Je reçois une erreur étrange sur mon serveur web pour apparemment tous les fichiers sauf les fichiers .aspx.

En voici un exemple. Remplacez simplement '/robots.txt' par n'importe quel nom .jpg ou .gif ou autre et vous comprendrez l'idée :

Le contrôleur pour le chemin '/robots.txt' n'a pas été trouvé ou n'implémente pas la norme IController.

Je suis sûr que c'est lié à la façon dont j'ai configuré le routage, mais je ne sais pas exactement ce que je dois faire pour y remédier.

Par ailleurs, il s'agit d'un site mixte MVC et WebForms, si cela fait une différence.

76voto

Daniel A. White Points 91889

Vous pouvez ignorer robots.txt et toutes les pages aspx de votre routage.

routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*robotstxt}", new {robotstxt=@"(.*/)?robots.txt(/.*)?"});

Vous pouvez également ignorer le favicon.

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

Vous pouvez ajuster l'expression régulière pour exclure les chemins d'accès.

Haacked de la source .

16voto

The Coder Points 269

La méthode "ignorer" présentée ci-dessus n'a pas fonctionné pour moi, mais j'ai trouvé une méthode similaire qui a fonctionné :

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });

6voto

Daniel Points 416

Cette erreur peut également se produire si, à l'intérieur d'une vue de votre zone, vous utilisez l'aide Html.Action. Cette aide utilisera toujours la zone comme préface, à moins que vous ne lui demandiez spécifiquement de ne pas le faire. Par exemple,

@Html.Action("Main", "Navigation", new { area = string.Empty })

2voto

Craig Stuntz Points 95965

Avez-vous encore.. :

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

... dans votre Global.asax.cs ?

MVC le place par défaut, et il est censé le gérer.

Si c'est le cas, le problème vient peut-être de la façon dont vous mélangez MVC et WebForms.

2voto

Ben Lesh Points 39290

J'ai trouvé une autre solution aussi... Même si je ne pense pas l'utiliser, cela vaut la peine de le montrer ici dans les réponses :

Ce qui suit devrait (en théorie) ignorer la recherche de contrôleurs pour tout ce qui contient un '.

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
    new { controller = @"[^\.]*" }                          // Parameter contraints.
);

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