为ASP.NET Core MVC中的所有响应添加标头

Mur*_*nze 11 c# asp.net-core-mvc .net-core asp.net-core

我想知道如何添加Access-Control-Allow-Origin:*到我的标题中.

我试过这个失败了:

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

Mar*_*ery 15

从内部使用app.use(...)和变异是正确的,但重要的是在链中的正确点进行.ASP.NET核心中间件组件可以"短路"(参见ASP.NET核心中间件文档),防止进一步调用中间件,并通过试验它我推断出这样做.在MVC应用程序,那么,这意味着你必须把你的电话之前.context.Response.HeadersStartup.ConfigureUseMvc()app.use(...) app.UseMvc()

换句话说,从模板ASP.NET 2.0的核心应用程序的Visual Studio为您生成开始,要修改Startup.ConfigureStartup.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();
}
Run Code Online (Sandbox Code Playgroud)

  • 既然是这里的例子,值得注意的是,将此特定标头设置为 `*` 会带来安全隐患,因为它有效地禁用了同源安全策略,这可能导致跨站点请求伪造攻击。仅当您想打开对整个 Internet 的 ajax 请求访问权限(例如在公共 API 的上下文中)并确保您公开的所有非幂等请求都具有某种形式的 CSRF 保护时才使用 `*`。 (2认同)

Bla*_*ake 5

我尝试了你的代码,它工作得很好......放置是关键:我很确定它需要位于链的早期。

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


Par*_*Ark 0

我们发现 ApplicationBuilder 方法也不一致 - 不清楚处理程序何时交回链(例如UseStaticFiles())以及何时不交回链(UseMvc())。

您没有说明您在什么环境下运行,但如果您打算使用 IIS,那么请不要放弃web.config!url重写模块工作得非常好,并且允许您对所有请求设置出站规则。

这里有一个很好的答案:https ://stackoverflow.com/a/26545975/548664