You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Asp.Net Core 2中阻止.AspNetCore.Antiforgery Cookie生成?

如何在ASP.NET Core 2中阻止.AspNetCore.Antiforgery Cookie的自动创建?

这个需求在涉及Cookie同意机制的场景下确实很关键,毕竟合规要求优先。针对你的问题,有两种主要解决方案,分别适用于不同的场景:

场景1:完全不需要Antiforgery功能

如果你的应用根本用不到防跨站请求伪造的相关特性(比如[ValidateAntiForgeryToken]注解),可以直接移除默认注册的Antiforgery服务,这样AddMvc就不会自动创建对应的Cookie了。

在ConfigureServices方法中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    // 移除所有默认的Antiforgery相关服务
    services.RemoveAll<IAntiforgery>();
    services.RemoveAll<IAntiforgeryPolicyProvider>();
    
    // 再添加Mvc服务,此时不会自动注入Antiforgery
    services.AddMvc();
}

场景2:需要保留Antiforgery功能,但要遵守Cookie同意规则

如果你还需要使用Antiforgery的核心功能,但要求必须在用户同意Cookie后才创建对应的Cookie,可以通过Cookie同意中间件+配置Antiforgery选项来实现:

步骤1:启用Cookie同意中间件

在Configure方法中,把UseCookiePolicy放在UseMvc之前:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 其他中间件(比如异常处理、静态文件等)...
    
    // 启用Cookie同意检查中间件
    app.UseCookiePolicy();
    
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

步骤2:配置Cookie策略和Antiforgery选项

在ConfigureServices中,设置Cookie同意规则,并将Antiforgery Cookie标记为非必要:

public void ConfigureServices(IServiceCollection services)
{
    // 配置Cookie策略:要求检查用户是否同意非必要Cookie
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
    
    // 添加Mvc并配置Antiforgery,将其Cookie标记为非必要
    services.AddMvc()
        .AddAntiforgery(options =>
        {
            // 标记该Cookie为非必要,只有用户同意后才会被创建
            options.Cookie.IsEssential = false;
        });
}

这样配置后,在用户明确同意Cookie之前,.AspNetCore.Antiforgery Cookie不会被自动设置;当用户同意后,Antiforgery会正常创建Cookie并提供服务。

内容的提问来源于stack exchange,提问作者Hansel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:00