Я использую маршрутизацию атрибутов из MVC5 в своих контроллерах.
Вопрос:
Есть ли способ управлять приоритетом маршрутизации атрибутов среди контроллеров?
Рассмотрим следующее
[Route("home/{action=index}/{username?}")]
public class HomeController : Controller
{
[Route("home/index/{username?}", Order = 1)]
[Route("home/{username?}", Order = 2)]
[Route("{username?}", Order = 3)]
public ActionResult Index()
{
// ... bunch of stuff
}
}
Основываясь на приведенном выше коде, метод действия HomeController.Index()
следует вызывать с помощью следующих запросов:
- домен/
- домен/{имя пользователя}
- домен/дом/
- домен/дом/{имя пользователя}
- домен/дом/индекс/
- домен/дом/индекс/{имя пользователя}
Второй контролер:
[Authorize(Roles = "Member")]
[Route("profile/{action=index}")]
public class ProfileController : Controller
{
[Route("profile")]
public ActionResult Index()
{
}
}
ProfileController.Index()
следует вызывать с помощью следующего запроса.
- домен/профиль
- домен/профиль/индекс
Эта проблема
Из примеров, если я отправляю domain/profile
в URL, возникает исключение неоднозначности. Кажется, что между domain/{username}
и domain/profile
есть неясность.
Теперь, если бы я использовал маршрутизацию на основе соглашений, это сработало бы (выигрывает первое совпадение). Но можно ли это сделать в маршрутизации атрибутов MVC5? потому что я обнаружил, что сторонняя библиотека поддерживает приоритет среди контроллеров
https://github.com/mccalltd/AttributeRouting/wiki/Controlling-Route-Precedence
routes.MapAttributeRoutes(config =>
{
config.AddRoutesFromController<ProfileController>();
config.AddRoutesFromController<HomeController>();
});