- PVSM.RU - https://www.pvsm.ru -
Зачем это может понадобится? Допустим у нас есть большое приложение ASP.NET WebForms и есть проект написанный на ASP.NET MVC и мы хотим их объеденить.
Допустим адрес нашего сайта такой: www.my-awesome-site.com [1] и мы хотим чтобы MVC был доступен по адресу www.my-awesome-site.com/mvc-stuff [2]
Предусловия: у нас есть решение с двумя проектами — ASP.NET Web Application (WebFormsApplication) и ASP.NET MVC проект (MvcApplication).
Что нужно сделать.
1. Установить ASP.NET MVC для WebFormsApplication
2. Добавить ссылку в WebFormsApplication на MvcApplication
3. Добавить публичный метод в MvcApplication аналогичный Application_Start
4. Вызвать этот метод в Application_Start приложения WebFormsApplication
5. С помощью Razor Generator включить Views в сборку MvcApplication
4.…
5. Profit!!!
1. Установим ASP.NET MVC для WebFormsApplication, делается через nuget следующей командой: Get-Project WebFormsApplication | Install-Package AspNetMvc
2. Добавим ссылку в WebFormsApplication на MvcApplication. Тут все просто — Add Reference… дальше вы знаете
3. Добавим публичный метод в MvcApplication аналогичный Application_Start
Код Global.asax MvcApplication
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Start();
}
public static void Start(string prefix = null)
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
// let's register routs with prefix
RouteConfig.RegisterRoutes(RouteTable.Routes, prefix);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
Сдесь есть такой параметр как “prefix”, он нужен для роутинга. Соответственно изменим метод RegisterRoutes класса RouteConfig, чтобы он мог принимать этот параметр.
Код RouteConfig MvcApplication
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes, string prefix)
{
if (!string.IsNullOrEmpty(prefix) || !prefix.EndsWith("/"))
{
prefix += "/";
}
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: prefix + "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
4. Добавим вызов этого метода в Application_Start приложения WebFormsApplication
Код Application_Start Global.asax WebFormsApplication
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterOpenAuth();
// Here we add MVC app
MvcApplication.MvcApplication.Start("mvc-stuff");
}
5. С помощью Razor Generator включим View в сборку MvcApplication
Для этого нужно установить Razor Generator через Extensions and Updates (не путать его с Razor Single File Generator for MVC)
6. Установим Razor Generator для проекта MvcApplication, делается это через nuget следующей командой Get-Project MvcApplication | Install-Package RazorGenerator.Mvc
Теперь для нужных View задать свойства Build Action: None, Custom Tool: RazorGenerator. После чего для View сгенерятся файлы с именем viewName.generated.cs
На этом все. Теперь можно сбилдить проекты и посмотреть что получилось.
Вот несколько ссылок по теме
Razor Generator [3]
Precompile your MVC Razor views using RazorGenerator [4]
ASP.NET MVC — как использовать вместе с WebForms [5]
ASP.NET MVC — как вынести часть приложения в отдельную сборку? [6]
ASP.NET WebForms and ASP.NET MVC in Harmony [7]
Автор: sentyaev
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/16456
Ссылки в тексте:
[1] www.my-awesome-site.com: http://www.my-awesome-site.com
[2] www.my-awesome-site.com/mvc-stuff: http://www.my-awesome-site.com/mvc-stuff
[3] Razor Generator: http://razorgenerator.codeplex.com/
[4] Precompile your MVC Razor views using RazorGenerator: http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html
[5] ASP.NET MVC — как использовать вместе с WebForms: http://blog.amartynov.ru/archives/asp-net-mvc-%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B5-%D1%81-webforms/
[6] ASP.NET MVC — как вынести часть приложения в отдельную сборку?: http://blog.amartynov.ru/archives/asp-net-mvc-%D0%B2%D1%8C%D1%8E%D1%85%D0%B8-%D0%B2-%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B5
[7] ASP.NET WebForms and ASP.NET MVC in Harmony: http://www.codeproject.com/Articles/38778/ASP-NET-WebForms-and-ASP-NET-MVC-in-Harmony
Нажмите здесь для печати.