Маршруты начинаются с - PullRequest
0 голосов
/ 10 марта 2020

На моем веб-сайте есть несколько действий, начинающихся с «Фильтр ...», которые используются моими формами для обновления частичных представлений.

Я бы хотел легко их направить, не сопоставляя каждое из них. Я попытался с некоторым регулярным выражением, но не получил никакого результата.

Например:

    data/filterbydate -> should be Controller: Data - Action: filterbydate
    data/filterbyproject -> should be Controller: Data - Action: filterbyproject
    data/filterbyname -> should be Controller: Data - Action: filterbyname
...

На самом деле мне бы не понадобилось указывать c маршрутизацию, если бы у меня не было Следующее правило в нижней части моего RouteConfig

url: "Data/{nodeAlias}"

, которое заставляет меня реализовать маршрутизацию для каждого действия в моем контроллере данных.

Я пробовал такие вещи, как url: "Data/Filter{*type}" или:

 route = routes.MapRoute(
            name: "DataWithAlias",
            url: "Data/{nodeAlias}",
            defaults: new { action = "Detail", controller = "Content", nodeAlias = "" },
            constraints: new { nodeAlias = "^(?!filter$).*$"}
        );

но безуспешно ...

Я либо ищу:

  • способ сопоставления всех моих действий фильтра в одном маршруте
  • Или способ исключить из URL: «Данные / {nodeAlias}» все, что начинается с фильтра *
  • Или способ избежать маршрутизации для этих действий фильтра, поскольку их URL-адреса уже правильно построены для целевого контроллера / действие

1 Ответ

0 голосов
/ 10 марта 2020

Следующее делает то, что я хочу, используя регулярное выражение в ограничении:

        route = routes.MapRoute(
          name: "DataFilter",
          url: "Data/{action}",
          defaults: new { action = "Index", controller = "Data"},
          constraints: new {action = "^filter.*|^GetPDF.*" }
      );
        // A route value determines the culture of the current thread
        route.RouteHandler = new MultiCultureMvcRouteHandler();
...