【问题标题】:asp.net mvc url routing - sub folder nameasp.net mvc url 路由 - 子文件夹名称
【发布时间】:2010-10-19 18:43:42
【问题描述】:

我想创建一个如下所示的网址:

公告、健康、政策是控制者

所以我制作了一个这样的新 url 路线图:

routes.MapRoute(
 "News",
 "news/{controller}/{action}/{id}",
 new { controller = "Announcement", action = "Index", id = "" }
);

它工作正常,但以下两个网址显示相同的页面:

我想阻止第二个网址。

我该怎么办?

谢谢 权

【问题讨论】:

    标签: asp.net-mvc url-routing


    【解决方案1】:

    从逻辑上讲,第二个 url 不应该工作。因为 news 是托管在 IIS 中的应用程序名称,我猜您可能已将其放在默认网站中。因此,如果您正在访问应用程序 URL 将始终是

    http://localhost/新闻/controller/action

    如果你给这个

    http://localhost/controller/action,它不知道要查找哪个应用程序。

    如果您尚未创建虚拟目录“news”,我建议您创建一个虚拟目录,然后在其中发布所有内容。 还要确保您没有在 Inetpub\wwwroot\ 目录中发布您的应用程序文件。

    正在等待您的回复继续。

    【讨论】:

      【解决方案2】:

      如果有任何默认路由映射,请将其移至映射的末尾。如果这没有帮助,那么您可以尝试Url Routing Debugger

      【讨论】:

        【解决方案3】:

        如果您仍然设置了默认路由,则需要将其删除或添加路由约束,使其与您的新闻路径不匹配。

        删除这个:

        routes.MapRoute( "Default",
                         "{controller}/{action}/{id}",
                         new { controller = "Home", action = "Index", id = "" } );
        

        或者添加一个约束:

        routes.MapRoute( "Default",
                         "{controller}/{action}/{id}",
                         new { controller = "Home", action = "Index", id = "" },
                         new { controller = "(Home|Other)" } );
        

        该约束将允许默认路由仅匹配控制器 Home 和 Other,但不匹配 Announcment、Health 或 Policy(或其他任何内容)。

        【讨论】:

        • 所以发生的情况是第一个 URL 与您的自定义路由匹配,但第二个 URL 与默认路由匹配。
        • @Graphain -- 这是我的怀疑,但如果没有看到整个代码就很难知道。
        • @kwon -- 'Other' 只是另一个控制器的一个例子,因为我不知道你的控制器叫什么名字。如果除了“新闻”中的控制器之外没有其他控制器,那么您根本不需要“默认”路由。
        • 正是我想要的;很有道理!
        猜你喜欢
        • 2014-10-05
        • 2017-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 2013-06-27
        • 2023-03-05
        • 2011-12-19
        相关资源
        最近更新 更多