Это сценарий, который работает уже много лет. У меня есть родительское веб-приложение asp.net на (скажем) www.MySite.co.uk, и под ним у меня есть несколько дочерних (клиентских) сайтов в виртуальных каталогах, например. www.MySite.co.uk/Client1 и т.д. Все сайты (родительские и дочерние виртуальные каталоги) являются традиционными приложениями веб-форм asp.net, использующими .NET 4.5, и все работает нормально.
Вчера я обновил свой родительский сайт как веб-приложение asp.net MVC 5 (разработанное для меня фрилансером). Я только обновил родительский сайт, и он сломал все мои дочерние сайты. В качестве чрезвычайного решения для этого я переименовал файл web.config на моем родительском веб-сайте MVC, очевидно, это сломало мой родительский сайт, но по крайней мере клиентские (дочерние) сайты снова работают.
Очевидно, что в корневом приложении (MVC один), который веб-сайты наследуют, они имеют значение, и им это не нравится.
В моем исследовании я натолкнулся на это: http://forums.iis.net/t/1200821.aspx?Creating+virtual+directory+for+ASP+NET+website+under+MVC+application, и поэтому я задаюсь вопросом, относится ли эта настройка к моему MVC RouteConfig.cs файл. Мой фрилансер настроил его так, чтобы старые ссылки на мои пути aspx все равно работали (т.е. Отображали мои новые представления). Я еще не знаком с кодом, но вот фрагмент:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "HelpRedirect",
url: "Help/{*route}",
defaults: new { controller = "Help", action = "ViewRedirect" }
);
routes.MapRoute(
name: "AspxRoute",
url: "{controller}/{action}.aspx",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ContactRoute",
url: "Contact.aspx",
defaults: new { controller = "Contact", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Я много искал, но до сих пор не смог найти решение. Поэтому мой вопрос таков:
- Возможно ли иметь традиционный сайт asp.net в виртуальном каталоге под сайтом MVC?
- Если да, то какие настройки следует искать? Как остановить дочерние сайты, наследующие неправильные настройки? У меня такое ощущение, что настройки находятся либо в файле web.config, либо что-то вроде RouteConfig.cs выше.
Я был бы очень благодарен, если бы кто-нибудь мог указать мне в правильном направлении, спасибо заранее.
Обновление
Также посмотрел этот пост Приложение Virtual Directory в приложении MVC Asp.net Я попытался редактировать web.config в корневом приложении и обернуть <location inheritInChildApplications="false">
вокруг все, что позволит. Но это не сработало, клиентские сайты все еще не работали.
Обновление 2
У меня есть ответ от моего фрилансера, который говорит, что речь идет о маршрутизации и URL-адресе, потому что MVC ожидает что-то в /Client 1 и т.д. Поэтому нам нужно написать маршрут, который отправляет такие запросы (маршрут плюс одно слово) контроллеру, который то нужно выяснить, является ли это страницей в MVC (например,/help) или клиентским сайтом (например, Client1) и отображать соответствующую страницу.
Лично я не знаю достаточно о маршрутизации, чтобы сделать это сам, но мой фрилансер по делу. Если он придумает решение, я опубликую его. Я по-прежнему буду признателен за любые другие входные или альтернативные решения.
Обновление 3
Теперь решено! Обратите внимание, что это не было связано с MVC, это была красная селедка. Спасибо Грегу Бургхардту за то, что он указал мне в правильном направлении со своим комментарием: "По-видимому, IIS сначала пытается сопоставить виртуальный каталог, а затем контроллер MVC". Это правда, есть отсутствие проблем с маршрутизацией с наличием сайтов ASP.NET Web Forms в виртуальных каталогах на родительском сайте MVC. Это связано с проблемами наследования Entity Framework Web.config. Я отправлю ответ.