Скажем, например, в совершенно новом приложении ASP.NET MVC 5, созданном из MVC с шаблоном «Индивидуальные учетные записи», если я удалю Global.asax.cs
класс и перенесу его код конфигурации в Startup.cs
Configuration()
метод следующим образом, каковы недостатки?
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
}
}
Плюсы для меня - то, что при обновлении приложений ASP.NET 4 до ASP.NET 5 и использовании частей, которые теперь должны быть настроены в классе Startup.cs, я не делаю внедрение зависимостей и другие настройки в двух разных классах, которые кажутся связанными для запуска и конфигурации.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
owin
iliketocode
источник
источник
AreaRegistration.RegisterAllAreas();
Вызвала ошибку для меня, так как этот метод не может быть использован во время запуска, как это, только вApplication_Start
. Однако мое приложение представляет собой API, и этот метод, по-видимому, полезен только для приложений MVC: stackoverflow.com/questions/18404637/…Ответы:
Startup.Configuration вызывается чуть позже, чем Application_Start, но я не думаю, что в большинстве случаев разница будет иметь большое значение.
Я считаю, что основные причины, по которым мы сохранили другой код в Global.asax:
Я думаю, что третья причина является самой важной, мы не использовали этот подход по умолчанию, поскольку некоторые сценарии не включают в себя наличие этой DLL, и приятно иметь возможность изменять подходы аутентификации, не делая недействительным местоположение, в котором не связан код (например, регистрация маршрута) размещена.
Но если ни одна из этих причин не применима в вашем сценарии, я думаю, что вы будете в порядке, используя этот подход.
источник
WebApi.Owin
пакет nuget. Я ошибочно ожидал, что зависимость будет включать все для запуска на IIS. Понятия не имею, почему я думал, что так как я хотел, чтобы стартап Owin разобщил зависимость IIS в первую очередь.Для тех, кто ищет полные шаги: Если вы хотите создать веб-API на базе OWIN, размещенный на IIS, эти шаги должны помочь вам:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
В решении щелкните правой кнопкой мыши и добавьте
Project -> Web -> ASP.NET Web Application
(нацеливание на .NET 4.6).3.1 Теперь в шаблонах ASP.NET 4.5 выберите Пустой в качестве шаблона
3.2 Это создает пустое решение с двумя пакетами nuget:
Установите следующие пакеты:
Для OWIN:
Затем добавьте Startup.cs с помощью метода Configuration:
Теперь добавьте класс, который наследуется
ApiController
, аннотируйте егоRoutePrefix
атрибутом, а метод действия -Route + HttpGet/PutPost
(представляющий глагол Http, который вам нужен), и вам будет хорошоисточник
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
После того, как я добавил это в свой API, я смог удалить global.asax.Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
показывает ошибку не найден в установочном пакете. Got установка этого пакета работы сInstall-Package WebApiContrib.Formatting.Razor 2.3.0
, так что без last.0[assembly:OwinStartup(typeof(namespace.Startup))]
часть должна находиться над частью пространства имен, в противном случае выдается следующая ошибкаAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Это мое понимание того, как развивался запуск / хостинг веб-приложения, так как все довольно запутанно. Небольшое резюме:
1. Классический ASP.NET: пишите только код приложения для запуска на последнем этапе обязательного конвейера IIS
2. ASP.NET с OWIN: настройте веб-сервер .NET и напишите код своего приложения. Больше не связан напрямую с IIS, поэтому вам больше не нужно его использовать.
3. Ядро ASP.NET: настройте хост и веб-сервер для использования и написания кода приложения. Больше не нужно использовать веб-сервер .NET, если вы ориентируетесь на .NET Core вместо полной .NET Framework.
Теперь я немного подробнее расскажу о том, как это работает и какие классы используются для запуска приложения:
Классический ASP.NET
Классические приложения ASP.NET имеют
Global.asax
файл в качестве точки входа. Эти приложения могут быть запущены только в IIS, и ваш код выполняется в конце конвейера IIS (поэтому IIS отвечает за CORS, аутентификацию ... еще до того, как ваш код запустится). Начиная с IIS 7 вы можете запускать свое приложение в интегрированном режиме, который интегрирует среду выполнения ASP.NET в IIS. Это позволяет вашему коду настраивать функции, которые раньше были недоступны (или только в самом IIS), такие как перезапись URL вApplication_Start
случае вашегоGlobal.asax
файла или использование нового<system.webserver>
раздела в вашемweb.config
файле.ASP.NET с OWIN
Прежде всего, OWIN - это не библиотека, а спецификация того, как веб-серверы .NET (например, IIS) взаимодействуют с веб-приложениями. Сами Microsoft имеют реализацию OWIN под названием проект Katana (распространяется через несколько различных пакетов NuGet). Эта реализация предоставляет
IAppBuilder
интерфейс, с которым вы сталкиваетесь вStartup
классе, и некоторые промежуточные компоненты OWIN (OMC), предоставляемые Microsoft. С помощьюIAppBuilder
вы в основном составляете промежуточное ПО в режиме «подключи и работай», чтобы создать конвейер для веб-сервера (в дополнение к только конвейеру ASP.NET в IIS7 +, как указано выше), а не привязаны к конвейеру IIS (но теперь вы используете компонент промежуточного программного обеспечения для CORS, компонент промежуточного программного обеспечения для аутентификации ...). По этой причине ваше приложение больше не связано с IIS, и вы можете запустить его на любом веб-сервере .NET, например:То, что делает все настолько запутанным, заключается в том, что
Global.asax
он по-прежнему поддерживается вместе сStartup
классом OWIN , в то время как оба они могут делать схожие вещи. Например, вы можете внедрить CORSGlobal.asax
и аутентификацию с помощью промежуточного программного обеспечения OWIN, что может сбить вас с толку.Мое эмпирическое правило заключается в том, чтобы полностью удалить
Global.asax
файл, чтобы использовать егоStartup
всякий раз, когда мне нужно добавить OWIN.ASP.NET Core
ASP.NET Core - это следующая эволюция, и теперь вы можете использовать как .NET Core, так и полную .NET Framework. Когда вы ориентируетесь на .NET Core, вы можете запускать свое приложение на любом хосте, который поддерживает .NET Standard. Это означает, что вы больше не ограничены веб-сервером .NET (как в предыдущем пункте), но можете разместить свое приложение в контейнерах Docker, веб-сервере Linux, IIS ...
Точкой входа для веб-приложения ASP.NET Core является
Program.cs
файл. Там вы настраиваете свой хост и снова указываете свойStartup
класс, где вы настраиваете свой конвейер. Использование OWIN (с помощьюIAppBuilder.UseOwin
метода расширения) не является обязательным, но полностью поддерживается .источник