ASP.NET MVC不提供默认文档

Jon*_*ill 21 asp.net-mvc

我有一个ASP.NET MVC应用程序,默认页面应该是index.html,它是磁盘上的实际文件.

我可以使用www.mydomain.com/index.html浏览到该文件,因此我知道它将被提供并存在,但如果我使用www.mydomain.com,我会得到404.

我确保在IIS7中正确设置了默认文档,我甚至已经注释掉了我的global.asax中定义的所有路由,以确保我没有导致此问题的路由.

总结一下:

  • 我在磁盘上有一个index.html文件,IIS7设置为使用index.html作为默认文档.
  • 如果我删除我的ASP.NET MVC应用程序并保留index.html文件作为预期的默认文档.
  • 如果我发布我的ASP.NET MVC应用程序,那么index.html不会被默认文档提供服务.

有谁知道如何让ASP.NET MVC提供默认文档?

piu*_*ius 29

ASP.Net MVC路由由Global.asax/ Global.asax.csfiles 控制.开箱即用的路由如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
}
Run Code Online (Sandbox Code Playgroud)

没有指定路径时,即.www.domain.tld/,路线是空字符串,"".因此,路由查找具有该名称的控制器.换句话说,它寻找一个完全没有名字的控制器.当它找不到这样的控制器时,它会提供一个404 NOT FOUND错误页面.

要解决此问题,请将该路径映射到有意义的路径,或者完全忽略该路由,将控制权传递给index.html文件:

routes.IgnoreRoute("");
Run Code Online (Sandbox Code Playgroud)


gri*_*egs -3

我怀疑您自己添加了index.html,因为mvc 框架不知道该扩展。

mvc 中的默认索引页是 //domain/home/index ,物理上是index.aspx。

如果您使用 //domain 调用您的域,则路由引擎将假定 /home/index.aspx 而不是 index.html。