在URL中没有操作或ID的情况下路由到控制器

时间:2014-02-17 01:22:40

标签: asp.net-mvc-4 asp.net-mvc-routing

我有以下路线,2个控制器“Home”,“Properties”:

routes.MapRoute(
    name: "DefaultWithNoActionInUrl",
    url: "{controller}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这些网址正确路由并转到索引操作:

  • /
  • /主页
  • /主页/索引
  • /主页/ 1
  • /属性/索引
  • /属性/ 1

这个一直给资源找不到错误:

  • /属性

似乎当我使用没有动作和ID的属性url时,它不会映射到任一路径。

我的路线出了什么问题?

1 个答案:

答案 0 :(得分:0)

您可能会注意到在解决方案资源管理器中,有一个名为“Properties”的文件夹,其中包含AssemblyInfo.cs。 如果我就在这里,当你编写/ Properties时,它基本上是由一个负责列出静态文件的模块捕获的(没有路由到asp.net mvc路由)。当它试图列出这个文件夹的内容时运行时不允许它,因为没有为目录列表配置此文件夹。

同样,如果您创建名为“Content”的控制器,您将看到相同的错误。

如果您有可能更改控制器的名称?

如果这不可能,你可以跟随。

在你的RouteConfig.cs

routes.RouteExistingFiles = true;

有关上述工作原理的详细信息,请参阅https://prerakkaushik.wordpress.com/2014/02/12/routing-request-for-static-files-with-or-without-extension-in-asp-net-mvc/