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

.NET 6 API添加[ValidateAntiForgeryToken]时出现服务未注册错误

解决.NET 6 API调用[ValidateAntiForgeryToken]时的500错误

问题根源

[ValidateAntiForgeryToken]特性依赖Microsoft.AspNetCore.Mvc.ViewFeatures模块的服务,而纯API项目默认仅通过AddControllers()注册核心API服务,未包含ViewFeatures相关依赖,导致找不到ValidateAntiforgeryTokenAuthorizationFilter服务。

解决方案

方案一:手动验证(推荐纯API场景)

无需引入额外依赖,通过注入IAntiforgery服务手动验证请求:

  1. Program.cs中配置Antiforgery服务
builder.Services.AddAntiforgery(options =>
{
    options.HeaderName = "X-XSRF-TOKEN"; // 匹配Next.js携带的请求头
    options.Cookie.Name = "XSRF-TOKEN";
    options.Cookie.SameSite = SameSiteMode.Lax; // 根据跨域场景调整,跨域可设为None
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // HTTPS环境启用
});
  1. 在控制器中注入并手动验证
using Microsoft.AspNetCore.Antiforgery;

[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    private readonly IAntiforgery _antiforgery;

    public YourController(IAntiforgery antiforgery)
    {
        _antiforgery = antiforgery;
    }

    [HttpPost]
    public async Task<IActionResult> YourAction()
    {
        // 验证CSRF令牌
        await _antiforgery.ValidateRequestAsync(HttpContext);
        
        // 业务逻辑代码
        return Ok();
    }
}

方案二:添加ViewFeatures依赖(不推荐纯API)

如果坚持使用[ValidateAntiForgeryToken]特性,需在Program.cs中注册ViewFeatures服务:

// 替换AddControllers()为AddControllersWithViews(),或单独添加ViewFeatures
builder.Services.AddControllers().AddViewFeatures();
// 或者
builder.Services.AddControllersWithViews();

此方案会引入MVC视图相关的不必要依赖,仅适合同时包含MVC视图和API的混合项目。

验证要点

  • 确保Next.js请求中正确携带X-XSRF-TOKEN请求头,值与XSRF-TOKENCookie一致
  • 跨域场景下需配置CORS允许携带Cookie和自定义头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:35