Я пытался передать токен защиты от подделки моему методу HTTPPost в контроллере MVC из моего файла js. Я получаю следующую ошибку:
Ошибка проверки токена защиты от подделки: отсутствует требуемый файл 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);
}
}
Willy David Jr
, вам нужно получить данные из $ ('input [name = __ RequestVerificationToken]'). Если у вас нет ввода с именем__RequestVerificationToken
, вам нужно добавить@Html.AntiForgeryToken()
или<form method="post"></form>
в ваше представление. - person Yiyi You   schedule 15.03.2021