. Net Core / MVC Мультитенантная маршрутизация Attritubute с использованием областей с дублирующимися маршрутами между различными контроллерами. - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать приложение. NET Core MVC, которое обслуживает другой контент (который я определил как области) в зависимости от домена. Я использую ограничение, которое будет обслуживать соответствующую область на основе домена:

routes.MapRoute(
    name: "Website1",
    template: "{controller=Default}/{action=Index}/{id?}",
    defaults: new { area = "Website1" },
    constraints: new { _ = new DomainConstraint("website1.com") });

routes.MapRoute(
    name: "Website2",
    template: "{controller=Default}/{action=Index}/{id?}",
    defaults: new { area = "Website2" },
    constraints: new { _ = new DomainConstraint("website2.com") });

Это работает хорошо (пропустит DomainConstraint, потому что это работает), но проблема в том, что у меня есть 2 разных контроллера, использующих тот же маршрут, и я получаю эту ошибку:

AmbiguousActionException: несколько действий совпадают. Следующие действия соответствовали данным маршрута и удовлетворяли всем ограничениям:

Company.Web. Mvc .Sites.Areas.Website1.DefaultController.ThankYou Company.Web. Mvc .Sites.Areas.Website2.DefaultController .ThankYou

оба этих контроллера имеют следующие атрибуты маршрута (у разных сайтов иногда могут быть одинаковые URL):

[Route("thank-you")]

У меня вопрос, как я могу убедиться, чем при сопоставлении правильной области (например, Website1), запрос направляется на маршрут контроллера этой области (Website1.DefaultController) (спасибо)? Я попытался создать contstraint пространства имен, который наследуется от ActionMethodSelectorAttribute, но, очевидно, не работает для атрибутов маршрута.

В принципе мне нужны два разных домена, чтобы иметь возможность использовать один и тот же URL-адрес, который будет в двух разных контроллерах:

website1.com/thank-you
(Company.Web.Mvc.Sites.Areas.Website1.DefaultController.ThankYou)

website2.com/thank-you 
(Company.Web.Mvc.Sites.Areas.Website2.DefaultController.ThankYou)

Заранее большое спасибо :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...