Параметры бесконечного URL для ASP.NET MVC Route
Мне нужна реализация, где я могу получить бесконечные параметры на моем контроллере ASP.NET. Будет лучше, если я приведу вам пример:
Давайте предположим, что у меня будут следующие URL:
example.com/tag/poo/bar/poobar
example.com/tag/poo/bar/poobar/poo2/poo4
example.com/tag/poo/bar/poobar/poo89
Как видите, он получит бесконечное количество тегов после example.com/tag/
и косая черта будет разделителем здесь.
На контроллере я хотел бы сделать это:
foreach(string item in paramaters) {
//this is one of the url paramaters
string poo = item;
}
Есть ли какой-нибудь известный способ добиться этого? Как я могу получить значения из контроллера? С Dictionary<string, string>
или же List<string>
?
НОТА:
Вопрос не очень хорошо объяснил IMO, но я старался изо всех сил, чтобы соответствовать этому. в. Не стесняйтесь настроить его
5 ответов
Как это:
routes.MapRoute("Name", "tag/{*tags}", new { controller = ..., action = ... });
ActionResult MyAction(string tags) {
foreach(string tag in tags.Split("/")) {
...
}
}
Уловить все даст вам сырой строки. Если вы хотите более элегантный способ обработки данных, вы всегда можете использовать собственный обработчик маршрута.
public class AllPathRouteHandler : MvcRouteHandler
{
private readonly string key;
public AllPathRouteHandler(string key)
{
this.key = key;
}
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var allPaths = requestContext.RouteData.Values[key] as string;
if (!string.IsNullOrEmpty(allPaths))
{
requestContext.RouteData.Values[key] = allPaths.Split('/');
}
return base.GetHttpHandler(requestContext);
}
}
Зарегистрируйте обработчик маршрута.
routes.Add(new Route("tag/{*tags}",
new RouteValueDictionary(
new
{
controller = "Tag",
action = "Index",
}),
new AllPathRouteHandler("tags")));
Получить теги в виде массива в контроллере.
public ActionResult Index(string[] tags)
{
// do something with tags
return View();
}
На всякий случай, если кто-то придет к этому с MVC в.NET 4.0, вам нужно быть осторожным, когда вы определяете свои маршруты. Я счастливо собирался global.asax
и добавление маршрутов, как предлагается в этих ответах (и в других уроках), и ничего не получится. Мои маршруты все просто по умолчанию {controller}/{action}/{id}
, Добавление дополнительных сегментов в URL дало мне ошибку 404. Затем я обнаружил файл RouteConfig.cs в папке App_Start. Оказывается, этот файл называется global.asax
в Application_Start()
метод. Итак, в.NET 4.0, убедитесь, что вы добавили туда свои собственные маршруты. Эта статья освещает это красиво.
в ядре asp .net вы можете использовать *, например, в маршрутизации
[HTTPGet({*id})]
этот код может быть многопараметрическим или при использовании строки отправки с косой чертой использовать их для получения всех параметров