Я пытаюсь реализовать небольшой сайт ASP.NET MVC, который взаимодействует с другим сайтом. Короче говоря, сеансы управляются между основным сайтом и спутниковыми сайтами через токены в URL. Я могу указать формат URL, но не могу отменить требование, чтобы маркер сеанса был представлен как часть URL.
Я пытаюсь выяснить, как настроить маршрутизацию, и я нахожусь в нескольких умах здесь. Я не могу решить, что будет лучше, или, возможно, есть лучший способ сделать это. Основные способы, которыми я думаю:
routes.MapRoute("Main", "{controller}/{action}/{id}/{token}");
Предоставляет URL-адреса, такие как http://mysite.com/Products/Detail/5/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f
Pro: в основном соответствует существующему соглашению MVC для создания сайтов.
Con: Добавляет усложнение к маршрутизации при поддержке значений по умолчанию для ID и Action.
routes.MapRoute("Main", "{token}/{controller}/{action}/{id}/");
Предоставляет URL-адреса, такие как http://mysite.com/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f/Products/Detail/5
Pro: упрощает маршрутизацию - все еще может применять значения action / id по умолчанию согласно стандартному соглашению MVC
Con: очень "не похожие на веб" URL. Требуется регулярное выражение для проверки того, что первая переменная является действительным GUID / токеном, прежде чем переходить к следующему маршруту в таблице.
Еще одна возможность приходит на ум, проходя такие сеансы, как:
http://mysite.com/Home/Index?session=5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f
С этим связана проблема, связанная с тем, что у меня есть базовый класс, производный от Controller, через который проходят все другие защищенные страницы. Класс SecureController переопределяет Execute () и проверяет действительность токена, взятого из URL. Оба подхода (GET и маршрутизация), кажется, было бы достаточно просто получить токен в функции контроллера Execute (), но подход GET выглядит немного неуклюжим, в то время как подход маршрутизации кажется, что из-за отсутствия лучшего объяснения сломать элегантность маршрутизации MVC.
Кто-нибудь еще сталкивался с подобной проблемой и имел какие-либо конкретные успехи или трудности, которыми можно поделиться?