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

Kendo UI Grid.Read()触发ValidateAntiForgeryToken验证失败问题

解决方案

1. 为GET请求的Grid Read Action添加忽略防伪造验证标记

既然AutoValidateAntiforgeryTokenAttribute默认应跳过GET请求,但你的场景中部分GET请求仍触发验证,可直接在对应Action上添加[IgnoreAntiforgeryToken],明确跳过验证:

[IgnoreAntiforgeryToken]
public IActionResult ReadWarningMessages(int providerID)
{
    // 业务逻辑实现
}

2. 调整全局防伪造验证配置,精准控制验证范围

若不想逐个Action添加标记,可替换全局过滤器,指定仅对非GET方法启用验证:

builder.Services.AddControllersWithViews(options =>
{
    options.Filters.Add(new ValidateAntiforgeryTokenAttribute
    {
        Methods = new HashSet<string> { "POST", "PUT", "DELETE", "PATCH" }
    });
});

注:用ValidateAntiforgeryTokenAttribute替代原AutoValidateAntiforgeryTokenAttribute,通过Methods参数明确限定验证的HTTP方法,避免不必要的GET请求验证。

3. 检查Kendo Grid请求的实际HTTP方法

部分Kendo Grid配置(如批量操作、编辑模式)可能会覆盖你指定的请求方法,即使代码中写了.Type(HttpVerbs.Get)。可通过浏览器开发者工具的Network面板确认失败请求的实际方法:

  • 若实际为POST请求,需确保Kendo Ajax请求携带RequestVerificationToken到请求头中:
.DataSource(dataSource => dataSource.Ajax()
    .ServerOperation(false)
    .Read(x => x.Action("ReadWarningMessages", "UserWarningMessages", new { providerID = Model.ProviderHeaderData.ProviderId })
        .Type(HttpVerbs.Get))
    .RequestHeaders(new { 
        RequestVerificationToken = document.cookie.split('; ').find(row => row.startsWith('RequestVerificationToken=')).split('=')[1] 
    })
)

4. 排查防伪造令牌与用户标识的绑定问题

ASP.NET Core防伪造令牌默认会与用户ClaimsPrincipal绑定,若请求的用户上下文存在差异(比如匿名用户标识变化),即使Cookie值一致也会验证失败。若你的应用允许匿名访问,可修改配置取消令牌与用户标识的绑定:

builder.Services.AddAntiforgery(options =>
{
    options.SuppressIdentityHeuristicChecks = true;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:03:21