【问题标题】:asp mvc4 html helper not navigating to expected pageasp mvc 4 htmlhelper 没有导航到期望页面
【发布时间】:2017-01-16 23:17:31
【问题描述】:

我正在使用以下代码生成链接

@Html.ActionLink("Search", "Index", "Properties")

在客户端渲染

<a href="/Properties">Search</a>

查看上面的链接,我预计会到达

controller: Properties

action: Index

当我点击链接时,我被导航到http://localhost:49878/Properties/,我得到了错误

HTTP 错误 403.14 - 禁止 Web 服务器配置为不列出此目录的内容。

如果我导航到http://localhost:49878/Properties/Index,我会得到预期的页面。

为什么?

我查看了RouteConfig 以尝试理解这一点并查看默认路线

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

我以为下面的方法可以解决问题,但没有,为什么?

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

【问题讨论】:

  • 您的解决方案中是否有一个名为 Properties 的文件夹?
  • 不,但我确实有一个名为 properties 的控制器
  • 你确定? (默认情况下 VS 会创建一个)。如果你没有导航到(比如).../Content,你会得到同样的错误

标签: asp.net asp.net-mvc asp.net-mvc-4 razor html-helper


【解决方案1】:

您只能在解决方案中看到这样的属性文件夹:

但是如果像这样打开项目文件夹:

可以在两个路径中看到两个文件夹:

查看文件夹

路由系统检查文件系统以查看 URL 是否与磁盘上的文件/文件夹匹配。如果找到匹配项,则忽略路由,并且请求绕过任何路由条目,以便直接提供文件。

要解决此问题,您可以在 RouteConfig 中将 RouteExistingFiles 属性设置为 true

routes.RouteExistingFiles = true;

【讨论】:

    【解决方案2】:

    您不能使用 Properties,因为它是具有 AssemblyInfo.cs 的文件夹的名称。这么受限制的名字。

    添加到

    routes.RouteExistingFiles = true; 
    

    在 RouteConfig 中注册路由以忽略物理路径(虽然这会对静态文件产生一些复杂性,但请彻底测试它)。

    更好的方法是重命名您的控制器并使用它,不确定是否还有其他可以做的事情。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2014-05-13
      • 1970-01-01
      • 2014-05-30
      • 2016-09-28
      相关资源
      最近更新 更多