#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
);