1

我想拥有一些具有单一方法的控制器,可以让我在某些层次结构(文件系统等)中导航。

换句话说,我希望有可能使用灵活的路由访问此方法并将部分路由作为参数。例如,在这种层次结构的情况下

Root
  Sub-folder-A
  Sub-folder-B
    Sub-folder-C

我想访问包含下一条路线的文件夹

mymvcapplication/explorer/root
mymvcapplication/explorer/root/sub-folder-a
mymvcapplication/explorer/root/sub-folder-b/sub-folder-c

我应该配置什么以及在哪里正确实施它?

4

1 回答 1

2

为了支持请求 url 中可变数量的 url 参数值,您可以*在路由定义中使用前缀标记您的方法参数。

使用 MVC 属性路由,

[Route("explorer/root/{*levels}")]
public ActionResult Details(string levels = "")
{
    if (String.IsNullOrEmpty(levels))
    {
        //request for root
    }
    else
    {
        var levelArray = levels.Split('/');
        //check level array and decide what to do 
    }
    return Content("Make sure to return something valid :) ");
}

最后一个带有前缀的参数*就像一个包罗万象的参数,它将在之后将任何内容存储在 url 中explorer/root

因此,当您请求时yoursite.com/explorer/root/a/b/c/d,默认模型绑定器会将值映射"a/b/c/d"levels参数。您可以调用该Split字符串上的方法来获取 url 段数组。

要启用属性路由,请转到RouteConfig.cs并调用MapMvcAttributeRoutes().RegisterRoutes

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 }  
    );
}
于 2016-01-03T04:53:54.060 回答