Нужен ли мне глобальный.асакс.cs-файл вообще, если я использую запуск OWIN.класс cs и переместить всю конфигурацию туда?


скажем, например, в совершенно новом ASP.NET приложение MVC 5 сделано из шаблона MVC w / Individual Accounts, если я удалю Global.asax.cs класс и переместить его код конфигурации в Startup.csConfiguration() метод как следовать, каковы недостатки?

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 165

2 ответа:

Автозагрузка.Конфигурация вызывается немного позже, чем Application_Start, но я не думаю, что разница будет иметь большое значение в большинстве случаев.

Я считаю, что основные причины, по которым мы сохранили другой код в глобальном масштабе.эйсакс являются:

  1. согласованность с предыдущими версиями MVC. (Вот где каждый в настоящее время ожидает найти этот код.)
  2. возможность добавления других обработчиков событий. В Глобальном.asax, вы можете обрабатывать другие методы, такие как Session_Start и ошибка приложения.
  3. корректность в различных сценариях аутентификации. пуск.Метод конфигурации вызывается только в том случае, если у вас есть Microsoft.Долг.Хозяин.SystemWeb.DLL в каталог bin. Если вы удалите эту DLL, она автоматически перестанет вызывать Startup.Конфигурация, которая может быть трудно понять.

Я думаю, что третья причина является наиболее важной, мы не использовали этот подход по умолчанию, так как некоторые сценарии не включают наличие этой DLL, и это приятно иметь возможность изменять подходы к аутентификации без аннулирования местоположения, где размещен несвязанный код (например, регистрация маршрута).

но если ни одна из этих причин не применяется в вашем сценарии, я думаю, что вы будете в порядке, используя этот подход.

для тех, кто ищет полные шаги: Если вы хотите создать OWIN на основе IIS размещенного веб-API, эти шаги должны получить вас там:

  1. File -> New -> Project
  2. в диалоге, Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
  3. на решение, щелкните правой кнопкой мыши, добавить 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
    
  4. установите следующие пакеты:

    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 глагол вы после), и вы должны быть хорошо идти