9

我真的想不出更好的标题,但我会详细解释这个场景。

我有一个由 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);
    }

除了初始化 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 ...");
        }

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

HttpConfiguration config = new HttpConfiguration();

在另一种不相关的情况下,我的 DelegatingHandlers 类不起作用。我认为可能正在创建 HttpConfiguration 的两个实例,因此存在问题。

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

GlobalConfiguration.Configuration

不知何故,这种变化似乎解决了 DelegatingHandlers 问题。然而,很快我的一些动作就被打破了。

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

事情是我得到一个“未实现”的异常。

当我回去并var config = new HttpConfiguration()在 OWIN 中使用 a 时,它就可以工作了。我的 DelegatingHandlers 也可以工作。

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

在不知道为什么要修复的情况下“修复”某些东西让我很困扰。射击空白不是我的事:)

谢谢!

4

0 回答 0