【问题标题】:how to remove the controller name from the url using rout in MVC [duplicate]如何使用MVC中的路由从url中删除控制器名称[重复]
【发布时间】:2016-01-07 08:23:18
【问题描述】:

如何在 MVC 5 中从 URL 中删除控制器名称。我尝试在 route.config 中添加路由

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(
           name: "Special",
           url: "action/{id}",
           defaults: new { controller = "Home", action = "LandingIndex", id = UrlParameter.Optional }
       );
    }
}

当我尝试通过http://localhost:24220/LandingIndex 访问 URL 时,它会提示 404 错误。 如何解决这个问题

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

您可以尝试通过首先放置更专业的路由来反转路由定义。此外,您可能不想将操作名称硬编码为action,而是使用{action} 占位符:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Special",
            url: "{action}",
            defaults: new { controller = "Home", action = "LandingIndex" }
        );

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

现在,当您导航到 /LandingIndex 时,应调用 Home 控制器上的 LanginIndex 操作。

还请注意,我已从第一条路由中删除了可选的 {id} 占位符。这样做的原因是,如果它存在,路由引擎将永远不会使用第二条路由。例如,如果您尝试加载/Home/Index,它将在Home 控制器上查找Home 操作并将Index 传递为id。如果您想拥有此 {id} 令牌,您将需要使用约束来区分您的第二个更一般的路线定义。例如,如果您的标识符始终是整数或遵循某种模式,您可以编写一个匹配它们的正则表达式约束。

【讨论】:

  • 在控制器端我们可以通过在控制器顶部添加路由属性来访问它
  • 您可以在 Global.asax 中选择基于属性的路由或显式路由定义。不要将两者混为一谈。
  • 是的,它解决了我的困惑,感谢一切正常,只需从上面的响应代码中删除以下行,它就可以按预期运行。 routes.MapMvcAttributeRoutes();
【解决方案2】:

谢谢达林·季米特洛夫 您回复的代码中的微小变化有助于我达到预期的结果

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Special",
        url: "{action}",
        defaults: new { controller = "Home", action = "LandingIndex" }
    );

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

只是删除以下行对我有帮助

routes.MapMvcAttributeRoutes();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2020-01-07
    相关资源
    最近更新 更多