带有OWIN的Web API.1个HttpConfiguration对象vs 2个HttpConfiguration对象

Pep*_*dez 8 asp.net-web-api owin httpconfiguration

我真的不能想到一个更好的标题,但我会详细解释这个场景.

我有一个由IIS托管的.Net Web API.

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

除了初始化Hangfire,CORS和web api之外,我在混合中也有OWIN.

    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 ...");
        }
Run Code Online (Sandbox Code Playgroud)

这是有趣的地方.最初,在Configuration(IAppBuilder app)方法中,第一行是

HttpConfiguration config = new HttpConfiguration();
Run Code Online (Sandbox Code Playgroud)

在另一个不相关的情况下,我的DelegatingHandlers类无法正常工作.我认为可能正在创建两个HttpConfiguration的内容,因此问题.

然后我决定使用在GlobalConfiguration中全局声明的相同HttpConfiguration,你可以在我粘贴的方法中看到...

GlobalConfiguration.Configuration
Run Code Online (Sandbox Code Playgroud)

不知何故,这种变化似乎修复了DelegatingHandlers问题.然而,很快我的一些行为就被打破了.

在我创建新项目的POST之后,我总是返回201 Created响应,该响应添加了Location标头.为此,我使用Url.Link("ActionName", new {field = value}).

事情是我得到一个'未实现'的例外.

当我回去并var config = new HttpConfiguration()在OWIN中使用它然后它工作.我的DelegatingHandlers也工作.

谁能解释一下这里发生了什么?我没能找到很多关于它的文档.为什么GlobalConfiguration.Configuration(一个HttpConfiguration对象)是全局的,但我不能在我的OWIN的启动类中使用它.

令我困扰的是"修理"某些东西而不知道它为何被修复.射击空白不是我的事:)

谢谢!