Нужен ли мне глобальный.асакс.cs-файл вообще, если я использую запуск OWIN.класс cs и переместить всю конфигурацию туда?
скажем, например, в совершенно новом ASP.NET приложение MVC 5 сделано из шаблона MVC w / Individual Accounts, если я удалю 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 и использование частей, которые теперь должны быть настроены в запуске.класс cs, я не делаю инъекцию зависимостей и другую конфигурацию в два раза различные классы, которые кажутся связанными с запуском и конфигурацией.
2 ответа:
Автозагрузка.Конфигурация вызывается немного позже, чем Application_Start, но я не думаю, что разница будет иметь большое значение в большинстве случаев.
Я считаю, что основные причины, по которым мы сохранили другой код в глобальном масштабе.эйсакс являются:
- согласованность с предыдущими версиями MVC. (Вот где каждый в настоящее время ожидает найти этот код.)
- возможность добавления других обработчиков событий. В Глобальном.asax, вы можете обрабатывать другие методы, такие как Session_Start и ошибка приложения.
- корректность в различных сценариях аутентификации. пуск.Метод конфигурации вызывается только в том случае, если у вас есть Microsoft.Долг.Хозяин.SystemWeb.DLL в каталог bin. Если вы удалите эту DLL, она автоматически перестанет вызывать Startup.Конфигурация, которая может быть трудно понять.
Я думаю, что третья причина является наиболее важной, мы не использовали этот подход по умолчанию, так как некоторые сценарии не включают наличие этой DLL, и это приятно иметь возможность изменять подходы к аутентификации без аннулирования местоположения, где размещен несвязанный код (например, регистрация маршрута).
но если ни одна из этих причин не применяется в вашем сценарии, я думаю, что вы будете в порядке, используя этот подход.
для тех, кто ищет полные шаги: Если вы хотите создать OWIN на основе IIS размещенного веб-API, эти шаги должны получить вас там:
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 :
Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0 Microsoft.Net.Compilers v 1.0.0
установите следующие пакеты:
Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3 Install-Package Microsoft.AspNet.WebApi -Version 5.2.3 Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
для OWIN:
Install-Package Microsoft.Owin.Host.SystemWeb Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
затем добавьте запуск.cs с методом конфигурации:
[assembly:OwinStartup(typeof(namespace.Startup))] public class Startup { /// <summary> Configurations the specified application. </summary> /// <param name="app">The application.</param> public static void Configuration(IAppBuilder app) { var httpConfiguration = CreateHttpConfiguration(); app .UseWebApi(httpConfiguration); } /// <summary> Creates the HTTP configuration. </summary> /// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns> public static HttpConfiguration CreateHttpConfiguration() { var httpConfiguration = new HttpConfiguration(); httpConfiguration.MapHttpAttributeRoutes(); return httpConfiguration; } }
теперь добавьте класс, который наследует от
ApiController
, комментировать его сRoutePrefix
атрибут и метод действия сRoute + HttpGet/PutPost
(представляя http глагол вы после), и вы должны быть хорошо идти