web-dev-qa-db-ja.com

MVC2の画像とrobots.txtで「IControllerを実装していません」というエラーが表示される

.aspxファイル以外のすべてのファイルについて、Webサーバーで奇妙なエラーが発生しています。

以下に例を示します。 「/robots.txt」を任意の.jpg名または.gifなどで置き換えるだけで、アイデアが得られます。

パス '/robots.txt'のコントローラーが見つからないか、IControllerを実装していません。

ルーティングのセットアップ方法と関係があるとは思いますが、どうすればルーティングを行う必要があるかはわかりません。

また、違いがある場合、これはMVCとWebFormsの混合サイトです。

52
Ben Lesh

Robots.txtとルーティング内のすべてのaspxページを無視できます。

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

ファビコンも無視してください。

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

正規表現を調整して、パスを除外できます。

source からハッキングされました。

75
Daniel A. White

上記の無視ルートは機能しませんでしたが、同様の機能が見つかりました。

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

このエラーは、お住まいの地域のビュー内でHtml.Actionヘルパーを使用した場合にも発生する可能性があります。このヘルパーは、特にそうしないように指定しない限り、常にエリアを前置詞として使用します。例えば。、

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

今でも持っていますか:

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

... Global.asax.csで?

MVCはデフォルトでそこに配置し、これを処理することになっています。

そうした場合、問題はMVCとWebFormをどのように混在させるかです。

2
Craig Stuntz

私は 別の解決策 も見つけました...私はそれを使用するとは思わないが、答えでここに示す価値がある:

以下は(理論上) '。'が付いているもののコントローラを探すことを無視するべきです。初期化。

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

存在しないリソースを要求すると、このエラーが発生しました。

具体的には、カスタムIE cssファイルを要求していました。

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

(これらは 条件コメント であり、IEによって解釈されます)

ただし、実際のリソースは〜/ Content/ie/ie7.cssに存在していました。

そのため、ルーティングを変更せずに、リソースの正しいURLを使用することでエラーを解決しました。

1
R. Schreurs