在MVC5中保留url中的默认控制器名称

时间:2018-04-26 22:53:33

标签: asp.net-mvc asp.net-mvc-5 asp.net-core-mvc

作为FormExtensions.BeginForm()方法的I用户,我遇到了UrlHelper.GenerateUrl()方法的不满意的行为。

有标准路由:

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

以下方法调用返回“/”

 //Request.RawUrl == "/Home"
 UrlHelper.GenerateUrl(
            routeName: null,
            actionName: null,
            controllerName: null,
            routeValues: null,
            routeCollection: RouteTable.Routes,
            requestContext: Request.RequestContext,
            includeImplicitMvcValues: true
         );

但是,如果在路由中没有将Home控制器设置为默认值,则上面的方法调用将返回“/ Home”,这是我想要的行为。

设置方法参数actionName =“Index”和controllerName =“Home”无效。

如何获取包含控制器名称的网址? ( “/主页”)

1 个答案:

答案 0 :(得分:1)

您可以在默认路线

之前添加其他路线定义
routes.MapRoute(
    name: "Home",
    url: "Home/{action},
    defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

请注意,不需要可选的{id}段,因为如果提供了该段,则控制器和操作名称将包含在网址中。