ASP.NET MVC 5:在文件浏览器模式下处理路径的单控制器方法
ASP.NET MVC 5: single controller method to handle paths in file browser mode
我想要一些具有单一方法的控制器,允许我在某些层次结构(文件系统等)中导航。
换句话说,我希望有可能使用灵活的路由访问此方法并将部分路由作为参数。例如在这种层次结构的情况下
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
我应该配置什么以及在哪里配置才能正确实施它?
为了在请求 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 :) ");
}
以 *
为前缀的最后一个参数类似于 catch-all 参数,它将在url 在 explorer/root
之后
因此,当您请求 yoursite.com/explorer/root/a/b/c/d
时,默认模型绑定器会将值 "a/b/c/d"
映射到 levels
参数。您可以对该字符串调用 Split
方法以获取 url 段的数组。
要启用属性路由,请转至 RouteConfig.cs
并调用 RegisterRoutes
中的 MapMvcAttributeRoutes()
方法。
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 }
);
}
我想要一些具有单一方法的控制器,允许我在某些层次结构(文件系统等)中导航。
换句话说,我希望有可能使用灵活的路由访问此方法并将部分路由作为参数。例如在这种层次结构的情况下
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
我应该配置什么以及在哪里配置才能正确实施它?
为了在请求 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 :) ");
}
以 *
为前缀的最后一个参数类似于 catch-all 参数,它将在url 在 explorer/root
因此,当您请求 yoursite.com/explorer/root/a/b/c/d
时,默认模型绑定器会将值 "a/b/c/d"
映射到 levels
参数。您可以对该字符串调用 Split
方法以获取 url 段的数组。
要启用属性路由,请转至 RouteConfig.cs
并调用 RegisterRoutes
中的 MapMvcAttributeRoutes()
方法。
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 }
);
}