ASP.Net核心:X-Frame-Options奇怪的行为

Sli*_*lip 9 c# x-frame-options asp.net-core

我需要X-Frame-Options: SAMEORIGIN从我的一些操作中删除标题,这些操作应该为iframe呈现内容.只要它被添加到默认我在禁用它的请求Startup.cs:services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);.然后我写了一个简单的中间件:

    app.Use(async (context, next) =>
    {
        context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");

        await next();
    });
Run Code Online (Sandbox Code Playgroud)

回答跨域请求所需的操作使用结果过滤器属性进行修饰:

    public class SuppresXFrameOptionFilter : ResultFilterAttribute
    {
        public override async Task OnResultExecutionAsync(ResultExecutingContext context,
ResultExecutionDelegate next)
        {
            context.HttpContext.Response.Headers.Remove("X-Frame-Options");

            await next();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这就是疲惫.第一个跨域请求失败,因为尽管过滤器最终按预期工作,但X-Frame-Options: SAMEORIGIN仍然存在于响应中(我next()在中间件之后检查了它- 标题重新出现).如果我按F5,标题不再出现在响应中,一切正常.只有X-Frame-Options标题才会发生这种情况,正确删除自定义标题.什么使X-Frame-Options被删除的内容再次出现在响应中?

Dan*_*.G. 16

我会说第一次请求Antiforgery保存cookie,这意味着它也试图设置X-Frame-Options标题.

如果你想在Antiforgery中禁用那个标题并自己手动处理它,你想要的是设置SuppressXFrameOptionsHeader 为true ;)

services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
Run Code Online (Sandbox Code Playgroud)