Url 使用静态名称 mvc 的路由

Url routing with static name mvc

我有一个控制器名称 Dashboard 并且在该控制器中我有一个操作 AdminDashboard 。现在默认情况下 url 这个动作变成 /Dashboard/AdminDashboard 。我想将此操作映射到此 url /SupervisorDashboard

这就是我正在做的,但找不到它的说法

routes.MapRoute(
            name: "SupervisorDashboard",
            url: "SupervisorDashboard",
            defaults: new { controller = "Dashboard", action = "AdminDashboard" }
        );

以及如何使用 Url.Action

重定向到此页面

Global.asax

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "SupervisorDashboard",
            url: "SupervisorDashboard",
            defaults: new { controller = "Dashboard", action = "AdminDashboard" }
        );

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

您是否将此新路由定义放在默认路由之前?路由的评估顺序与它们注册的顺序相同。如果您将默认路由放在任何自定义路由之前,它将被使用(并且由于您的代码中可能没有任何 SupervisorDashboardController,因此将返回 404)。

Url.Action 如果路由以正确的顺序定义,应该可以正常工作。

因此,对于这种情况,RouteConfig 应如下所示:

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

        // this one match /SupervisorDashboard only
        routes.MapRoute(
            name: "SupervisorDashboard",
            url: "SupervisorDashboard",
            defaults: new { controller = "Dashboard", action = "AdminDashboard" }
        );

        // should be last, after any custom route definition
        routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
}