ASP.NET MVC 5: метод с одним контроллером для обработки путей в режиме файлового браузера
Я хочу иметь некоторый контроллер с единственным методом, который позволил бы мне перемещаться по некоторой иерархии (файловая система и т. Д.).
Другими словами, я хочу иметь возможность доступа к этому методу с гибкими маршрутами и получить часть маршрутов в качестве параметра. Например, в случае этой иерархии
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
Что и где я должен настроить, чтобы реализовать это правильно?
1 ответ
Чтобы поддерживать переменное число значений параметра 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
и позвонить 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 }
);
}