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

.NET Core中如何为IAntiforgery和IHttpContextAccessor创建实例

问题解决说明

你遇到的实例为null的问题是因为没有将对应服务注册到ASP.NET Core的依赖注入(DI)容器中,这两个接口不需要你手动实例化实现类,框架已经内置了完整的实现和注册逻辑:

1. 接口对应默认实现(仅作了解,不推荐手动实例化)

  • IAntiforgery的默认实现类为Microsoft.AspNetCore.Antiforgery.Antiforgery
  • IHttpContextAccessor的默认实现类为Microsoft.AspNetCore.Http.HttpContextAccessor

注意:手动new实现类需要自行处理所有依赖项(比如Antiforgery还依赖配置项、日志服务、令牌存储服务等),复杂度极高,完全不推荐这种操作。


2. 正确的使用方式(通过DI容器注入)

步骤1:注册服务到容器

在你的项目启动文件Program.cs中添加以下注册代码(.NET 6及以上版本):

var builder = WebApplication.CreateBuilder(args);

// 注册IHttpContextAccessor服务
builder.Services.AddHttpContextAccessor();
// 注册Antiforgery服务,如果已经注册了AddControllersWithViews/AddRazorPages可省略,框架会默认注册
builder.Services.AddAntiforgery();

// 注册你自己编写的令牌处理类,生命周期根据你的业务场景选Scoped/Transient/Singleton
builder.Services.AddScoped<你的令牌处理类名>();

// 其他原有服务注册代码...
var app = builder.Build();
// 其他中间件配置...
app.Run();

步骤2:修改你的类代码,通过构造函数注入依赖

你原有代码的字段没有通过构造函数赋值,也没有做空值校验,修正后的参考代码:

public class 你的令牌处理类名
{
    private readonly IAntiforgery _antiforgery;
    private readonly IHttpContextAccessor _httpContextAccessor;

    // 构造函数参数由DI容器自动注入,不需要手动传值
    public 你的令牌处理类名(IAntiforgery antiforgery, IHttpContextAccessor httpContextAccessor)
    {
        _antiforgery = antiforgery;
        _httpContextAccessor = httpContextAccessor;
    }

    private void GenerateToken()
    {
        // 先判断HttpContext是否存在,避免空引用异常
        if (_httpContextAccessor.HttpContext != null)
        {
            _antiforgery.GetAndStoreTokens(_httpContextAccessor.HttpContext);
        }
    }
}

步骤3:获取你的类的实例

不要手动new你的令牌处理类,同样通过DI注入获取实例,比如在Controller中使用:

public class TestController : ControllerBase
{
    private readonly 你的令牌处理类名 _tokenHelper;

    public TestController(你的令牌处理类名 tokenHelper)
    {
        _tokenHelper = tokenHelper;
    }

    // 你的接口方法里直接调用即可
    [HttpGet]
    public IActionResult GetToken()
    {
        _tokenHelper.GenerateToken();
        return Ok();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:03