Могу я иметь традиционное ASP.NET веб-приложения в виртуальных каталогах под сайтом MVC?
это сценарий, который работает в течение многих лет. У меня есть родитель. asp.net веб-приложение на (скажем) www.MySite.co.uk и под ним у меня есть несколько дочерних (клиентских) сайтов в виртуальных каталогах, например www.MySite.co.uk/Client1 etc. Все сайты (родительские и дочерние виртуальные каталоги) являются традиционными asp.net веб-формы приложений с использованием .NET 4.5 и все работает нормально.
вчера я обновил свой родительский сайт, чтобы быть asp.net веб-приложение MVC 5 (разработано для меня фрилансер.) Я только обновил Родительский сайт, и он сломал все мои дочерние сайты. В качестве экстренного исправления для этого я переименовал web.файл конфигурации на моем родительском сайте MVC, очевидно, это сломало мой родительский сайт, но, по крайней мере, клиентские (дочерние) сайты снова работают.
очевидно, что в корневом приложении (MVC) есть параметр, который наследуют сайты webforms, и им это не нравится.
в моем исследовании я наткнулся на это: 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?
- если да, то какие настройки я должен смотреть? Как я могу остановить дочерние сайты, наследующие неправильные настройки? У меня такое чувство, что настройки либо в интернете.config или что-то связанное с RouteConfig.cs выше.
Я был бы очень благодарен, если бы кто-нибудь мог указать мне в правильном направлении, Спасибо продвижение.
обновление
также посмотрев на этот пост виртуальный каталог приложение в a Asp.net MVC app я пробовал редактировать web.config в корневом приложении и wrapping <location inheritInChildApplications="false">
вокруг всего, что позволит это. Но это не сработало, клиентские сайты по-прежнему не работали.
обновление 2
у меня есть ответ от моего фрилансера, который говорит, что речь идет о маршрутизации и URL, потому что MVC ожидает что-то быть в /Client1 и т. д. Поэтому нам нужно написать маршрут, который отправляет такие запросы (маршрут плюс одно слово) контроллеру, который затем должен увидеть, является ли это страницей в MVC (например, /help) или клиентском сайте (например, /Client1) и отобразить соответствующую страницу.
лично я не знаю достаточно о маршрутизации, чтобы сделать это сам, но мой фрилансер-это по делу. Если он найдет решение, я его опубликую. Я все равно был бы признателен за любой другой вклад или альтернативу решения.
обновление 3
теперь решена! Обратите внимание, что это не имело никакого отношения к MVC, это была красная селедка. Спасибо Грегу Бургхардту за то, что указал мне в правильном направлении своим комментарием "по-видимому, IIS пытается сначала сопоставить виртуальный каталог, а затем контроллер MVC". Это правда, есть нет проблем с маршрутизацией С иметь ASP.NET сайты веб-форм в виртуальных каталогах родительского сайта MVC. Это было связано с вебом.объекта config Вопросы наследования рамок. Я опубликую ответ.
2 ответов
наконец-то решили!
ответ Да, совершенно отлично иметь традиционное ASP.NET сайты веб-форм в виртуальных каталогах в Родительском каталоге сайта MVC. Нет проблем с маршрутизацией, так как IIS сначала ищет виртуальные каталоги, прежде чем смотреть на маршрутизацию MVC.
проблема, с которой я столкнулся, была связана с web.наследование конфигурационного файла. С новым сайтом MVC я впервые представил Entity Framework. Так что моя паутина.конфигурационный файл содержался следующий раздел:
Родительский MVC Web.config
<configSections>
<!-- various other sections ... -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
теперь мои дочерние сайты веб-форм уже имели ту же настройку, и оказывается, что нельзя указывать больше, чем один раз вниз по иерархии. Я знаю о <location inheritInChildApplications="false">
тег для предотвращения наследования, но после экспериментов я обнаружил, что это нельзя использовать на . Я также пробовал <clear />
тег в дочерней сети.config, но это кажется, не работает в <configSections>
либо.
таким образом, после ответ к аналогичной проблеме мне удалось решить ее, комментируя различные разделы Entity Framework в моем дочернем Интернете.config и использовал необычную привязку, чтобы также исправить проблемы с версией (мой родительский сайт использовал версию 6, но мои дочерние сайты использовали версию 5).
Веб-Ребенок.config Соответствующие Фрагменты:
прокомментировал out:
<configSections>
<!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />-->
комментарии:
<!--<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>-->
привязка в разделе выполнения всегда использовать версию 5:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<!-- This is to get this Virtual Directory to use EF5 even if parent uses EF6 -->
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
это немного грязное решение, поскольку мои дочерние веб-сайты форм не все в виртуальном каталоге под родительским сайтом MVC, поэтому в этих случаях разделы Entity Framework в Интернете.config нужно будет не комментировать. Если кто-то знает более аккуратное решение, это будет работать независимо от Родительский сайт (или его отсутствие), пожалуйста, поделитесь.
пожалуйста, попробуйте следующий подход, если я правильно понял вопрос. Сама Visual studio предоставляет возможность создания виртуальных каталогов и сопоставлений в IIS.
пожалуйста, следуйте шагу 1 и шагу 2, может быть, это поможет, если у меня есть правильный вопрос.
- выберите опцию " Web " в левой панели
- на центральном экране выберите опцию "LocalIIS" в раскрывающемся списке
- обеспечить Виртуальный путь для вас приложение в текстовом поле как
- http://localhost/YourAppName 5. нажмите CreatevirtualDirectory