Слишком много параметров в URL - Маршрутизация ASP.NET MVC - PullRequest
0 голосов
/ 05 мая 2011

Я ищу лучший способ для управления длинными URL в маршрутизации. У меня есть много действий, которые выглядят так:

/a/b/c/d/e

по маршруту:

routes.MapRoute(
           "xxx",
            "{a}/{b}/{c}/{d}/{e}", 
            new { controller = "Xxx", action="Xxx"});

контроллер:

public ActionResult Xxx(int a, int b, int c, int d, int e) { ... }

любое изменение параметров дает многократное изменение в каждом маршруте / действии, и в этом проблема. Это не эластично. Есть ли возможность сопоставить параметры некоторому объекту? Нечто похожее:

public ActionResult Xxx(RouteParams rp) { ... }

Хм ... в конце концов, я думаю, что мог бы использовать Фильтр Действий, чтобы решить это:

private RouteParams rp;
public override void OnActionExecuting(FilterExecutingContext filterContext) {
  rp = new RouteParams(...);
}

но мне не нравится это решение

С наилучшими пожеланиями

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Создайте объект, как вы сделали, и используйте ModelBinder для его создания вместо фильтра.Связыватель модели по умолчанию должен работать, если нет, то создайте пользовательский.

2 голосов
/ 06 мая 2011

Оставьте настройки маршрута такими же, просто создайте новую модель со свойствами, соответствующими параметрам в настройках маршрута:

public class XxxModel
{
    public int a { get; set; }
    public int b { get; set; }
    public int c { get; set; }
    public int d { get; set; }
    public int e { get; set; }
}

Затем используйте XxxModel в качестве параметра в действии:

public ActionResult Xxx( XxxModel model )
{
   ...
}

a, b, c, d и e будут сопоставлены со свойствами в модели.

0 голосов
/ 05 мая 2011

Будет ли это работать для вас?

routes.MapRoute(
           "xxx",
            "{*params}", 
            new { controller = "Xxx", action="Xxx"});

и

public ActionResult Xxx(string params) { ... }

params будет одной строкой (например, 1/2/3/4/5) вам придется сделать params.Split("/") и Convert.ToInt32() для параметров.

...