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

Blazor Web应用接收CURL POST请求的防伪造令牌验证问题咨询

一、Blazor应用端的正确配置

1. 后端端点启用防伪造验证

如果你的/data是Minimal API端点,需在Program.cs中配置并验证令牌:

builder.Services.AddAntiforgery(options =>
{
    options.HeaderName = "X-CSRF-TOKEN"; // 指定令牌的请求头名称
});

var app = builder.Build();

app.MapPost("/data", async (HttpContext context, IAntiforgery antiforgery) =>
{
    // 验证防伪造令牌
    await antiforgery.ValidateRequestAsync(context);
    
    // 读取POST表单数据
    var formData = await context.Request.ReadFormAsync();
    var keyValue = formData["key"];
    
    return Results.Ok($"Received: {keyValue}");
});

如果是MVC Controller,需添加[ValidateAntiForgeryToken]特性:

public class DataController : Controller
{
    [HttpPost("/data")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Post()
    {
        var formData = await Request.ReadFormAsync();
        var keyValue = formData["key"];
        return Ok($"Received: {keyValue}");
    }
}

2. Blazor组件内正确发送请求

Blazor框架会自动为HttpClient注入防伪造令牌,只需使用相对路径并构造合法的POST内容:

@page "/Data"
@inject HttpClient httpClient

<PageTitle>Data</PageTitle>

<h1>POST:</h1>

<p>@(rqData != null ? rqData : "NoData!")</p>

@code {
    private string? rqData;

    protected override async Task OnInitializedAsync()
    {
        await GetData();
    }

    private async Task GetData()
    {
        try
        {
            // 构造表单数据
            var formContent = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("key", "valueFromBlazor")
            });

            // 使用相对路径发送请求,框架自动携带令牌
            HttpResponseMessage response = await httpClient.PostAsync("/data", formContent);

            response.EnsureSuccessStatusCode();
            rqData = await response.Content.ReadAsStringAsync();
        }
        catch (HttpRequestException e)
        {
            rqData = "Error: " + e.Message;
        }
    }
}
二、CURL测试带令牌的请求

CURL是外部请求,需手动获取令牌并携带:

1. 获取防伪造令牌

先请求Blazor页面,保存Cookie并提取页面中的__RequestVerificationToken值:

# 保存Cookie到本地文件,同时获取页面内容
curl -c cookies.txt https://localhost:7084/Data

从返回的HTML代码中找到类似以下的隐藏字段,复制其value值(记为TOKEN_VALUE):

<input name="__RequestVerificationToken" type="hidden" value="xxxxxxxxx">

2. 发送带令牌的POST请求

方式1:将令牌放在表单数据中

curl -b cookies.txt -X POST https://localhost:7084/data \
-d "key=valueFromCurl&__RequestVerificationToken=TOKEN_VALUE"

方式2:将令牌放在请求头中(需与后端配置的HeaderName一致)

curl -b cookies.txt -X POST https://localhost:7084/data \
-H "X-CSRF-TOKEN: TOKEN_VALUE" \
-d "key=valueFromCurl"
三、重要提醒

不要随意禁用防伪造验证,这是防止CSRF攻击的核心安全机制,仅在公开无敏感数据的API场景下可考虑跳过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:26:10