web-dev-qa-db-ja.com

ASP.NET CoreMVCのすべての応答にヘッダーを追加します

ヘッダーにAccess-Control-Allow-Origin:*を追加する方法を知りたいのですが。

私はこれを試しましたが失敗しました:

app.Use((context, next) =>
{
    context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
    return next.Invoke();
});
13
MuriloKunze

app.use(...)を使用し、_context.Response.Headers_内から_Startup.Configure_を変更することは正しいですが、チェーンの適切なポイントで行うことが重要です。 ASP.NET Coreミドルウェアコンポーネントは「短絡」する可能性があり( ASP.NET Core Middleware ドキュメントを参照)、それ以上のミドルウェアが呼び出されないようにします。それを試してみると、UseMvc()はそうします。したがって、MVCアプリケーションでは、app.use(...)呼び出しbeforeapp.UseMvc()を実行する必要があります。

つまり、VisualStudioが生成するテンプレートASP.NETCore 2.0アプリケーションから始めて、_Startup.Configure_の_Startup.cs_を次のように変更する必要があります。

_public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // Add header:
    app.Use((context, next) =>
    {
        context.Response.Headers["Access-Control-Allow-Origin"] = "*";
        return next.Invoke();
    });

    app.UseMvc();
}
_
18
Mark Amery

独自のミドルウェアを作成するのではなく、asp.netコアフレームワークで組み込みのCORSミドルウェアを使用することもできます。

ConfigureクラスのStartupメソッドに、次のコードを追加します。

_// Add CORS for YourAnotherSite
    app.UseCors(builder =>
       builder.WithOrigins("http://YourAnotherSite.com"));
_

[〜#〜]または[〜#〜]

名前付きポリシーを使用する

ConfigureクラスのStartupメソッド内

_options.AddPolicy("AllowMyOrigin",
        builder => builder.WithOrigins("http://YourAnotherSite.com"));
_

次に、スタートアップクラスのConfigureServicesメソッドで。

app.UseCors("AllowMyOrigin");

または、ポリシーを各ControllerまたはActionメソッドに適用することもできます。

1
Abhinav Galodha

ApplicationBuilderメソッドにも一貫性がないことがわかりました。ハンドラーがチェーンに戻っているとき(たとえば、UseStaticFiles())とそうでないとき(UseMvc())は明確ではありません。

実行している環境はわかりませんが、IISを使用する場合は、まだweb.configをあきらめないでください! rl rewrite モジュールは完全に機能し、allリクエストにアウトバウンドルールを設定できます。

ここに良い答えがあります: https://stackoverflow.com/a/26545975/548664

0
Party Ark

私はあなたのコードを試しました、そしてそれは美しく働きました...配置は重要です:私はそれがチェーンの早い段階である必要があるとかなり確信しています。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();
        //app.UseCors(builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
        app.Use((context, next) => {
            context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
            return next.Invoke();
        });
        app.UseMvc();
        app.UseWebSockets();
        app.UseSignalR();
    }
0
Blake