У меня есть следующие два маршрута, определенные в моих приложениях.
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/{controller}/{action}/{id}",
new { language="en" , country="gb", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{language}-{country}/{controller}/{action}/{id}",
new { language = "en", country = "gb", id = UrlParameter.Optional }
);
Первый маршрут будет перехватывать такие URL-адреса, как
- en-gb/11111/Цели/Список
- en-gb/11111/Цели/Редактировать/2
Второй маршрут — это маршрут по умолчанию, который будет использоваться для таких вещей.
- en-gn/Учетная запись/Вход
- так далее
У меня есть вопрос: у меня есть определенные контроллеры, которые я хочу заставить вызываться только в том случае, если они пришли через маршрут applicationRoutes.
например, я хочу убедиться, что контроллер целей вызывается с идентификатором пользователя в данных маршрута.
Я знаю, что могу проверить в каждом действии контроллера, существует ли ключ идентификатора пользователя со значением в данных маршрута. Но мне это не кажется таким элегантным.
Я также мог бы уточнить маршруты и сделать что-то вроде этого:
routes.MapRoute(
"ApplicationRoutes",
"{language}-{country}/{userid}/Targets/{action}/{id}",
new { language="en" , country="gb", controller="targets", id = UrlParameter.Optional }
);
Но это не остановит запрос непосредственно к en-gb/Targets/List/ без указания значения идентификатора пользователя.
как лучше всего справиться с этим?