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 アプリ) メソッド内の最初の行は

HttpConfiguration config = new HttpConfiguration();

別の無関係な状況では、私の DelegatingHandlers クラスが機能していませんでした。HttpConfiguration の 2 つのインスタンスが作成されている可能性があると考えたため、問題が発生しました。

次に、GlobalConfiguration でグローバルに宣言されている同じ HttpConfiguration を使用することにしました。ここに貼り付けたメソッドで確認できます...

GlobalConfiguration.Configuration

この変更により、どういうわけか、DelegatingHandlers の問題が修正されたようです。しかし、すぐに私の行動のいくつかが壊れました。

新しいアイテムを作成する POST の後、常に Location ヘッダーを追加する 201 Created 応答を返します。このために私は使用しますUrl.Link("ActionName", new {field = value}).

問題は、「実装されていません」という例外が発生することです。

var config = new HttpConfiguration()戻って OWIN でa を使用すると、機能します。また、私の DelegatingHandlers も機能します。

ここで何が起こっているのか誰か説明できますか? それに関する多くのドキュメントを見つけることができませんでした。GlobalConfiguration.Configuration (HttpConfiguration オブジェクト) がグローバルであるのに、OWIN のスタートアップ クラスで使用できないのはなぜですか。

修正された理由を知らずに何かを「修正」するのは面倒です。ブランクを撃つことは私のことではありません:)

ありがとう!

4

0 に答える 0