ASP.NET Core MVC 3 Identity下[Authorize]接口GET请求403致DataTables报错如何解决
解决方案
方案1:调整Ajax配置携带身份凭证(优先推荐,GET请求不建议传递反伪造令牌)
如果你的项目使用Cookie身份认证,给Ajax请求添加xhrFields: { withCredentials: true }配置,同域/跨域请求会自动携带认证Cookie,无需手动传递令牌:
var urlCompleto = "....."; $.ajax({ url: urlCompleto, method: "GET", contentType: 'application/json', // 新增配置 xhrFields: { withCredentials: true } }).done(function (data) { // 处理返回数据 }).fail(function () { // 处理异常 })
如果你的项目使用JWT身份认证,将令牌放到Authorization请求头中即可:
// 示例从本地存储读取JWT令牌,可根据你的项目实际存储位置调整 const accessToken = localStorage.getItem('accessToken'); var urlCompleto = "....."; $.ajax({ url: urlCompleto, method: "GET", contentType: 'application/json', // 新增配置 headers: { 'Authorization': 'Bearer ' + accessToken } }).done(function (data) { // 处理返回数据 }).fail(function () { // 处理异常 })
方案2:强制在GET请求中传递反伪造令牌的配置方法
如果你的项目明确要求GET请求也需要校验反伪造令牌,需要同时调整前端和后端配置:
- 前端修改:将令牌拼接为URL查询参数,或者放到指定请求头中
var token = $('input[name="__RequestVerificationToken"]').val(); var urlCompleto = ".....?__RequestVerificationToken=" + encodeURIComponent(token); $.ajax({ url: urlCompleto, method: "GET", contentType: 'application/json', // 也可以选择放到请求头中,二选一即可 // headers: { // 'RequestVerificationToken': token // } }).done(function (data) { // 处理返回数据 }).fail(function () { // 处理异常 })
- 后端修改(以ASP.NET Core为例):调整反伪造校验规则,支持从查询参数/请求头读取令牌,同时开启GET请求校验
// Program.cs中添加反伪造配置 builder.Services.AddAntiforgery(options => { options.FormFieldName = "__RequestVerificationToken"; options.HeaderName = "RequestVerificationToken"; }); // 控制器/接口上的反伪造校验特性替换为[ValidateAntiforgeryToken],默认[AutoValidateAntiforgeryToken]不会校验GET请求
补充说明
GET请求本身属于幂等请求,常规场景下不需要校验反伪造令牌,优先排查身份认证凭证是否正确携带即可解决403报错问题。
内容的提问来源于stack exchange,提问作者GiuBerr
相关产品推荐
相关产品推荐

