I'm getting a “Does not implement IController”

2020-01-30 02:36发布

I'm getting a strange error on my webserver for seemingly every file but the .aspx files.

Here is an example. Just replace '/robots.txt' with any .jpg name or .gif or whatever and you'll get the idea:

The controller for path '/robots.txt' was not found or does not implement IController.

I'm sure it's something to do with how I've setup routing but I'm not sure what exactly I need to do about it.

Also, this is a mixed MVC and WebForms site, if that makes a difference.

6条回答
一夜七次
2楼-- · 2020-01-30 03:18

I found another solution too... While I don't think I'll use it, it's worth showing here in the answers:

The following should (in theory) ignore looking for controllers for anything with a '.' in it.

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
    new { controller = @"[^\.]*" }                          // Parameter contraints.
);
查看更多
Fickle 薄情
3楼-- · 2020-01-30 03:19

You can ignore robots.txt and all the aspx pages in your routing.

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

You might want to ignore the favicon too.

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

You can adjust the regular expression to exclude paths.

Haacked from the source.

查看更多
我命由我不由天
4楼-- · 2020-01-30 03:26

This error could also happen if inside a view in your area, you use the Html.Action helper. This helper will always use the area as a prepend, unless you specifically tell it not to. E.g.,

@Html.Action("Main", "Navigation", new { area = string.Empty })
查看更多
啃猪蹄的小仙女
5楼-- · 2020-01-30 03:29

The ignore route given above didn't work for me but I found a similar one that did:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });
查看更多
The star\"
6楼-- · 2020-01-30 03:29

I encountered this error when I request resources that did not exist.

Specifically, I was requesting a custom IE css file:

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

(These are condition comments, interpreted by IE)

However, the actual resource existed on ~/Content/ie/ie7.css.

So, without any modifications to the routing, the error was solved by using the correct url of the resource.

查看更多
看我几分像从前
7楼-- · 2020-01-30 03:30

Do you still have:

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

... in your Global.asax.cs?

MVC puts it there by default, and it's supposed to handle this.

If you do, then the problem may be how you're mixing MVC and WebForms.

查看更多
登录 后发表回答