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

如何对需认证与防伪令牌验证的ASP.NET Core API端点做集成测试

ASP.NET Core API集成测试:搞定认证+防伪令牌的请求问题

解决步骤

要通过这个端点的测试,核心是先拿到认证Cookie和防伪令牌,再把两者都放进请求里发送,具体操作如下:

1. 初始化带Cookie支持的测试客户端

用WebApplicationFactory创建客户端时,确保允许自动重定向并启用Cookie管理:

var factory = new WebApplicationFactory<Program>();
var client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
    AllowAutoRedirect = true,
    BaseAddress = new Uri("https://localhost:5001/")
});

2. 模拟登录获取认证Cookie

先调用登录接口完成认证,测试客户端会自动保存认证Cookie:

var loginContent = new FormUrlEncodedContent(new Dictionary<string, string>
{
    ["Email"] = "test@example.com",
    ["Password"] = "Test123!"
});
var loginResponse = await client.PostAsync("/Account/Login", loginContent);
loginResponse.EnsureSuccessStatusCode();

3. 获取有效的防伪令牌

防伪令牌需要从当前会话中获取,你可以:

  • 调用专门返回令牌的API接口:
var tokenResponse = await client.GetAsync("/api/AntiForgery/GetToken");
tokenResponse.EnsureSuccessStatusCode();
var tokenDto = await tokenResponse.Content.ReadFromJsonAsync<AntiForgeryTokenDto>();
var antiForgeryToken = tokenDto.Token;
  • 或者如果是从页面表单获取,解析HTML提取__RequestVerificationToken的值。

4. 构造目标请求,同时携带双验证信息

把防伪令牌放到请求头(要和你API配置的头名一致,比如RequestVerificationToken),客户端会自动带上之前保存的认证Cookie:

var requestData = new YourRequestDto { /* 你的请求数据 */ };
var requestContent = new StringContent(
    JsonSerializer.Serialize(requestData),
    Encoding.UTF8,
    "application/json"
);

var targetRequest = new HttpRequestMessage(HttpMethod.Post, "/api/YourProtectedEndpoint")
{
    Content = requestContent
};
targetRequest.Headers.Add("RequestVerificationToken", antiForgeryToken);

var response = await client.SendAsync(targetRequest);
response.EnsureSuccessStatusCode(); // 现在应该能正常到达处理器了

必查配置点

确保你的API配置正确:

  • 注册防伪服务时指定头名:builder.Services.AddAntiforgery(opt => opt.HeaderName = "RequestVerificationToken");
  • 目标端点同时标记[Authorize]和[ValidateAntiForgeryToken]

避坑提醒

  • 认证Cookie和防伪令牌必须来自同一个会话,不能分开获取后拼接
  • 注意防伪令牌的传递方式(头/表单)要和API的验证逻辑匹配
  • 测试客户端默认会自动管理Cookie,不要手动清空或替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:38