如何解决无法验证防伪令牌
我试图将防伪令牌从我的 js 文件传递给 MVC 控制器中的 HTTPPost 方法。我收到以下错误:
“防伪令牌验证失败:所需的防伪 cookie“__RequestVerificationToken”不存在。”
当我尝试调试 js 代码并查看时,我在“antiForgeryToken”变量中看到了令牌。但不确定发生了什么。有人能告诉我我做错了什么吗?这是我来自 js 文件的代码:
options.data = function (find) {
var antiForgeryToken = $("#forgeryToken").val();
fetch('/Options/Students/Studentscore',{
method: 'POST',body: JSON.stringify({
find: find,querystringParams: querystringParams
}),headers: {
"Content-type": "application/json; charset=UTF-8","RequestVerificationToken": antiForgeryToken
}
})
.then(function (response) { return response.json() })
.then(function (response) {
var mapped = _.map(response.Results,function(i) {
return {
displayValue: i.text
}
});
return mapped;
})
.catch(function(err) {
debugger;
});
}
这是我的操作方法
[System.Web.Mvc.HttpPost]
[ValidateAntiForgeryTokenAttribute]
public async Task<ActionResult> Studentscore([FromBody] StudentValues request)
{
//Implementation
return JsonNet(sometestval,JsonRequestBehavior.AllowGet);
}
这是我的防伪课程
[AttributeUsage(AttributeTargets.Method)]
public class ValidateAntiForgeryTokenAttribute : Filterattribute,IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
try
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
ValidateRequestHeader(filterContext.HttpContext.Request);
}
else
{
AntiForgery.Validate();
}
}
catch(Exception e)
{
throws exception;
}
}
private static void ValidateRequestHeader(HttpRequestBase request)
{
var cookietoken = string.Empty;
var formToken = string.Empty;
var tokenValue = request.Headers["RequestVerificationToken"];
if (!string.IsNullOrEmpty(tokenValue))
{
var tokens = tokenValue.Split(':');
if (tokens.Length == 2)
{
cookietoken = tokens[0].Trim();
formToken = tokens[1].Trim();
}
}
AntiForgery.Validate(cookietoken,formToken);
}
}
解决方法
尝试编辑这个:
var antiForgeryToken = $("#forgeryToken").val();
给这个:
var antiForgeryToken = $('input[name="__RequestVerificationToken"]').val();
通常,AntiForgery 令牌被命名为 __RequestVerificationToken 而不是带有 forgeryToken 的 ID,除非您明确重命名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。