Веб-API с OWIN. 1 объект HttpConfiguration против 2 объектов HttpConfiguration

Я не могу придумать лучшего заголовка, но я объясню сценарий подробно.

У меня есть.Net Web API, который размещается на IIS.

    protected void Application_Start()
    {
        SwaggerConfig.Register();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        GlobalConfiguration.Configure(WebApiConfig.Register);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }

У меня также есть OWIN в миксе, который не делает ничего, кроме инициализации Hangfire, CORS и веб-API.

    public static void Configuration(IAppBuilder app)
        {
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
            OAuthConfig.Config(app);
            Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("SSDeployment");
            app.UseHangfireServer();

            app.UseWebApi(System.Web.Http.GlobalConfiguration.Configuration);
            app.Use(typeof(OwinLogging));

            Log.Debug("Starting SSDeployment.IntakeService - OWIN Configuration set for WebApi ...");
        }

Вот где это становится интересным. Первоначально в методе Configuration (приложение IAppBuilder) первая строка была

HttpConfiguration config = new HttpConfiguration();

В другой несвязанной ситуации мои классы DelegatingHandlers не работали. Я подумал, что, может быть, два экземпляра HttpConfiguration были созданы, поэтому проблема.

Затем я решил использовать ту же HttpConfiguration, которая глобально объявлена ​​в GlobalConfiguration, вы можете увидеть в методе, который я вставил здесь...

GlobalConfiguration.Configuration

Это изменение каким-то образом, казалось, решило проблему DelegatingHandlers. Однако довольно скоро некоторые из моих действий были нарушены.

После POST, где я создаю новый элемент, я всегда возвращаю ответ 201 Created, который добавляет заголовок Location. Для этого я использую Url.Link("ActionName", new {field = value}).

Дело в том, что я получаю исключение "Не реализовано".

Когда я вернусь и использую var config = new HttpConfiguration() в ОВИН тогда это работает. Также работают мои Делегирующие Хендлеры.

Кто-нибудь может объяснить, что здесь происходит? Я не смог найти много документации об этом. Почему GlobalConfiguration.Configuration (объект HttpConfiguration) является глобальным, но я не могу использовать его в классе запуска своего OWIN.

Меня беспокоит "исправить" что-то, не зная, почему это исправлено. Съемка заготовок это не мое дело:)

Спасибо!

0 ответов

Другие вопросы по тегам