Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 mvc 为什么';在这种情况下,是否使用Html.ActionLink默认路由工作?_Asp.net Mvc_Routing_Http Status Code 404_Actionlink - Fatal编程技术网

Asp.net mvc 为什么';在这种情况下,是否使用Html.ActionLink默认路由工作?

Asp.net mvc 为什么';在这种情况下,是否使用Html.ActionLink默认路由工作?,asp.net-mvc,routing,http-status-code-404,actionlink,Asp.net Mvc,Routing,Http Status Code 404,Actionlink,我对路由有一个相当奇怪的问题 在一年不必担心它的配置之后,回到路由,我使用默认路由并忽略资源的路由: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new

我对路由有一个相当奇怪的问题

在一年不必担心它的配置之后,回到路由,我使用默认路由并忽略资源的路由:

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

routes.MapRoute(
        "Default",
        // Route name
        "{controller}/{action}/{id}",

        // URL with parameters
        new
        {
            controller = "Home",
            action = "Index",
            id = UrlParameter.Optional
        });
我有一个
rulescoontroller
,它有一个
Index
Lorem
操作,还有一个
Index.aspx
Lorem.aspx
在视图>规则目录中

我在maseter页面上有一个针对规则/索引的ActionLink:

<li><div><%: Html.ActionLink("linkText", "Index", "Rules")%></div></li>
  • 链接被呈现为
    http://localhost:12345/Rules/
    我得到了一个404

    当我在URL中键入
    Index
    时,应用程序将其路由到操作

    当我将默认路由操作从
    “Index”
    更改为
    “Lorem”
    时,操作链接将呈现为
    http://localhost:12345/Rules/Index
    添加
    索引
    ,因为它不再位于默认路由上,并且应用程序将正确路由到索引操作

    我已使用,但输入url
    http://localhost:12345/Rules/
    也导致了404的使用

    我想我已经涵盖了所有的新手错误,相关的SO问题和基本的RTFM

    我假设“规则”在路由中不是任何类型的保留字。
    除了更新路线和去除障碍,我还能看什么?

    确保网站所在目录中没有名为“Rules”的文件夹。在默认配置中,ASP.NET MVC路由将在路由定义之前考虑物理路径。如果定义的路由与网站中物理文件夹的路径相匹配,则路由引擎将被完全绕过

    您可以通过将
    RouteTable.Routes.RouteExistingFiles
    属性更改为
    false
    来禁用到物理路径的路由,但如果执行此操作,并且应用程序具有到物理资源的路径(如图像、脚本、样式表等),则需要使用匹配的IgnoreRoute()定义来适应这些路径。
    例如:
    RouteTable.Routes.IgnoreRoute(“content/{*pathInfo}”)

    您是否定义了任何IgnoreRoutes?你是否碰巧在你的网站目录中有一个名为“Rules”的文件夹?我有默认的忽略路径(现在问题中添加了),文件夹上有“yes”;架构师还没有为业务对象创建另一个项目,因此那里有一个“规则”文件夹。我会重新组织和测试。添加此评论作为答案,以防万一。在那里,完成了。我花了很长时间才找到问题!谢谢Nathan,第二段特别有趣和有用。