【问题标题】:Route to controller without an action or ID in the URL在 URL 中没有操作或 ID 的路由到控制器
【发布时间】:2014-02-17 01:22:39
【问题描述】:

我有以下路线,以及 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 }
);

这些 url 路由正确,并将我带到索引操作:

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

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

  • /属性

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

我的路线做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您可能会注意到,在解决方案资源管理器中,有一个名为“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/

    【讨论】:

    • 正是它。我以前从未遇到过这种情况。感谢您的链接。我尝试将 RouteExistingFiles 设置为 true,但是所有 js 和 css 文件引用都返回 404。所以我重命名了控制器。
    • 我认为你的情况只是有 routes.RouteExistingFiles = true;应该足够了。请让我知道这是否适合您。谢谢
    • 是的,如前所述,它导致我的 js 和 css 文件无法加载,因此我必须将这些行添加到路由配置中,以便我的静态资源仍然可以加载。 routes.IgnoreRoute("Content/{*wildcard}"); routes.IgnoreRoute("脚本/{*wildcard}"); routes.RouteExistingFiles = true;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多