Как мне создать маршрут для сопоставления всех путей, начинающихся с заданного префикса?

#asp.net #asp.net-mvc #iis #url-routing #asp.net-mvc-routing

#asp.net #asp.net-mvc #iis #url-маршрутизация #asp.net-mvc-routing

Вопрос:

В моем приложении MVC я хочу создать маршрут таким образом, чтобы при запросе пользователем URL-адреса, начинающегося с префикса, вызывалось определенное действие.

Например, мне нужен маршрут, который отображался processData{whatever} бы на действие, чтобы при запросе пользователя processData processData.asmx или processDataZOMG или любом другом с processData префиксом вызывалось это действие.

Я попробовал следующий маршрут

 routes.MapRoute(
    @"ProcessData", @"processData*", //<<<< note asterisk
    new { controller = @"Api", action = @"ProcessData" } );
  

но он не совпадает processData , и что-либо с этим префиксом — сопоставление маршрута не выполняется, и запрос перенаправляется на главную страницу.

Как мне создать маршрут, который соответствует всем путям с определенным префиксом для конкретной пары контроллер-действие?

Ответ №1:

Попробуйте следующее: Обновление: это решение не работает, пожалуйста, обратитесь к решению, которое я предлагаю в моем комментарии к этому ответу.

 routes.MapRoute(
    @"ProcessData", @"processData/{*appendix}", //<<<< note asterisk
    new { controller = @"Api", action = @"ProcessData" } );
  

Комментарии:

1. Это не соответствует processDataX .

2. Вы правы. Однако вы можете реализовать пользовательский IRouteHandler параметр, который проверяет, начинается ли часть за последней косой чертой (при условии, что вы обрезаете конечные косые черты) с «ProcessData».

Ответ №2:

Вы могли бы использовать ограничения маршрута:

 routes.MapRoute(
    "ProcessData", // Route name
    "{token}", // URL with parameters
    new { controller = "Api", action = "ProcessData" }, // Parameter defaults
    new { token = @"^processdata.*" } // constraints
);