【问题标题】:Actionless URL produces HTTP 404 (Controller & Folder Name Clash)无操作 URL 产生 HTTP 404(控制器和文件夹名称冲突)
【发布时间】:2014-11-12 06:55:13
【问题描述】:

问题

我有两个控制器:RequestsControllerServicesController。两者都包含Index 操作。

当我浏览到/Requests 时,它会自动运行Index 操作,但对于/Services/Services/,它甚至没有运行Index 操作就给出了HTTP 404。

背景

路线配置为现货。该项目还包含一个名为 Services 的顶级目录下的各种类:

疑难解答

问题似乎与ServicesController 和顶级Services 文件夹之间的命名冲突有关。

  • 我仍然可以毫无问题地访问/Services/Index
  • 当我未在 URL 中指定操作名称时,调试确认 Index 方法正在为 Requests 而不是 Services 运行。
  • 重命名或删除顶级 Services 文件夹会导致问题停止发生。

【问题讨论】:

  • 有趣的一个......你的控制器、动作或路线没有任何问题
  • @Leo,是的;我只是尝试单独设置描述的配置,并没有出现问题,所以看起来它是由上述描述未涵盖的因素引起的。我正在努力!
  • 已安装 Glimpse?它会告诉你路由映射到什么。
  • @TiesonT.,我尝试安装它,但是当我导航到 /Services 时,Glimpse HUD 没有显示。

标签: asp.net asp.net-mvc asp.net-mvc-4 http-status-code-404 url-routing


【解决方案1】:

我明白了。当您有一个与根目录中的文件夹同名的控制器时,这是一个常见问题。假设Services 文件夹中的所有文件都没有被StaticFilesHandler 映射,我认为您可以简单地告诉路由系统通过将RouteExistingFiles 设置为true 将所有“服务”路由映射到ServicesController ...

routes.RouteExistingFiles = true;

更新

我完全忽略了Content 文件夹。您需要通过在路由映射逻辑之前明确指定它来防止对“内容”文件夹(或任何其他包含静态文件的文件夹,例如脚本文件夹)的请求通过路由管道...

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

【讨论】:

  • 这确实解决了问题,但似乎也禁用了对 CSS 和 JS 文件等服务器端内容的访问。
  • @Sam 是的。您需要将各自的忽略指令添加到您的内容文件中。我会在一分钟内更新我的答案
  • 感谢您的更新!把它放在路由之前,使控制器操作的请求重定向到默认路由,然后产生一个 404。把它放在路由之后似乎并不能解决 RouteExistingFiles 引起的问题。
  • 我认为最后一个问题是由 URL 模式中的花括号引起的。删除它们解决了 Content 下文件的问题。我还需要为 Scripts 文件夹添加类似的行。
  • @Sam 我只是说得更清楚一点......很高兴你自己工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2011-08-17
  • 2014-03-17
  • 2014-02-09
相关资源
最近更新 更多