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
相关产品推荐
相关产品推荐

