Веб-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.
Меня беспокоит "исправить" что-то, не зная, почему это исправлено. Съемка заготовок это не мое дело:)
Спасибо!