Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无操作URL生成HTTP 404(控制器和文件夹名称冲突) 问题_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Http Status Code 404_Url Routing - Fatal编程技术网

Asp.net 无操作URL生成HTTP 404(控制器和文件夹名称冲突) 问题

Asp.net 无操作URL生成HTTP 404(控制器和文件夹名称冲突) 问题,asp.net,asp.net-mvc,asp.net-mvc-4,http-status-code-404,url-routing,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Http Status Code 404,Url Routing,我有两个控制器:requestscoontroller和ServicesController。两者都包含索引操作 当我浏览到/Requests时,它会自动运行索引操作,但对于/Services或/Services/而言,它甚至不运行索引操作就给出了HTTP 404 背景 路由配置为库存。该项目还包含名为“服务”的顶级目录下的各种类: 故障排除 问题似乎与ServicesController和顶级Services文件夹之间的命名冲突有关 我仍然可以毫无问题地访问/Services/Index

我有两个控制器:
requestscoontroller
ServicesController
。两者都包含
索引
操作

当我浏览到
/Requests
时,它会自动运行
索引
操作,但对于
/Services
/Services/
而言,它甚至不运行
索引
操作就给出了HTTP 404

背景 路由配置为库存。该项目还包含名为“服务”的顶级目录下的各种类:

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

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

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

    routes.RouteExistingFiles = true;
    
    更新 我完全忽略了
    内容
    文件夹。您需要在路由映射逻辑之前显式指定“内容”文件夹(或包含静态文件的任何其他文件夹,如脚本文件夹),以防止对“内容”文件夹的请求通过路由管道

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

    有趣的一点…你的控制器、动作或你的routes@Leo是 啊我只是试着单独设置所描述的配置,但问题没有发生,所以看起来它是由上述描述中未涉及的因素引起的。我正在努力!安装一瞥?它将向您显示路由映射到的内容。@TiesonT.,我尝试安装它,但当我导航到
    /Services
    时,浏览HUD不会显示。这确实解决了问题,但似乎也禁用了对服务器端内容(如CSS和JS文件)的访问。@Sam true。您将需要向内容文件添加相应的忽略指令。我会在一分钟内更新我的答案,谢谢你的更新!将其放在路由之前,使控制器操作请求重定向到默认路由,然后生成404。将它放在路由之后似乎无法解决由
    RouteExistingFiles
    引起的问题。我认为最后一个问题是由URL模式中的花括号引起的。删除它们修复了“内容”下文件的问题。我还需要为“脚本”文件夹添加一行类似的内容。@Sam我只是想说得更清楚一点……很高兴你自己完成了