web-dev-qa-db-fra.com

Je reçois une erreur "N'implémente pas 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.

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

Le contrôleur pour le chemin '/robots.txt' est introuvable ou n'implémente pas IController.

Je suis sûr que c'est quelque chose à voir avec la façon dont j'ai configuré le routage, mais je ne sais pas exactement ce que je dois faire à ce sujet.

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

52
Ben Lesh

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.

Piraté de la source .

75
Daniel A. White

L'itinéraire ignoré indiqué ci-dessus n'a pas fonctionné pour moi, mais j'en ai trouvé un similaire qui a fonctionné:

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

Cette erreur peut également se produire si dans une vue de votre zone, vous utilisez l'assistant Html.Action. Cet assistant utilisera toujours la zone comme un préfixe, sauf si vous le lui demandez expressément. Par exemple.,

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

Avez-vous encore:

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

... dans votre Global.asax.cs?

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

Si vous le faites, le problème peut être la façon dont vous mélangez MVC et WebForms.

2
Craig Stuntz

J'ai trouvé ne autre solution aussi ... Bien que je ne pense pas que je vais l'utiliser, cela vaut la peine d'être montré ici dans les réponses:

Les éléments suivants devraient (en théorie) ignorer la recherche de contrôleurs pour tout ce qui a un '.' en elle.

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

J'ai rencontré cette erreur lorsque je demande des ressources qui n'existaient pas.

Plus précisément, je demandais un fichier IE css personnalisé:

<!--[if lt IE 8]>@Styles.Render("~/Content/ie7.css")<![endif]-->

(Ce sont commentaires de condition , interprétés par IE)

Cependant, la ressource réelle existait sur ~/Content/ie/ie7.css.

Ainsi, sans aucune modification du routage, l'erreur a été résolue en utilisant l'URL correcte de la ressource.

1
R. Schreurs