0

所以我正在开发一个 MVC 4 应用程序。我的问题是对于某个控制器,Url 可以是http://domain/category/clothing/1256,也可以是http://domain/category/clothing/shirts/formal/128'. 如您所见,url 的深度发生了变化,但都必须路由到类别控制器。

由于不知道 url 的最大部门,我不能使用 Routeconfig,因为我不知道参数什么时候来。

routes.MapRoute(
    name: "Category",
    url: "Category/{ignore}/{id}/{SubCatId}/{SubSubCatId}",
    defaults: new { controller = "Category", action = "Index", CatId = UrlParameter.Optional, SubCatId = UrlParameter.Optional, SubSubCatId = UrlParameter.Optional },
    namespaces: new[] { "CSPL.B2C.Web.Controllers" },
    constraints: new { id = @"\d+" }
);

上面的代码将不起作用,因为它只占一个级别。关于如何实现这一目标的任何想法

类别控制器的Index方法

public ActionResult Index(string id, string SubCatId, string SubSubCatId)
{
    return view();
}
4

1 回答 1

0

你唯一的选择是一个包罗万象的参数。但是,有两个警告:

  1. catch-all 参数必须是路线的最后一部分
  2. catch-all 参数将吞下所有内容,包括/,因此您必须使用正则表达式或其他内容手动解析所需的各个位。

本质上,您只需将路线更改为:

routes.MapRoute(
    name: "Category",
    url: "Category/{*path}",
    defaults: new { controller = "Category", action = "Index" },
    namespaces: new[] { "CSPL.B2C.Web.Controllers" }
);

然后,需要更改您的操作以接受这个新参数:

public ActionResult Index(string path)
{
    // parse path to get the data you need:

    return view();
}
于 2017-09-18T13:13:24.650 回答