我在MVC项目中使用jQuery来调用控制器动作。我需要在操作上使用[ValidateAntiForgeryToken]。网页上正在生成__RequestVerificationToken隐藏字段,而jQuery正在传递其值,但该操作仍在抱怨它不存在。
我在操作中添加了__RequestVerificationToken作为参数,注释了[ValidateAntiForgeryToken],并在操作中添加了一个断点。 __RequestVerificationToken以正确的值传递给操作。 类似的代码已成功用于其他操作。我不认为这有什么区别。
PIRForm.cshtml中的代码段:
@Html.AntiForgeryToken()
<div ng-app="pirApp" keep-alive>
<div ng-controller="pirController">
<input type="hidden" ng-model="pir.OrderId" />
<div ng-class="{'hidden': dataLoaded}"><h3>Please wait <i class="fa fa-circle-o-notch fa-spin"></i></h3></div>
<fieldset class="hidden" ng-class="{'hidden': !dataLoaded}">
<legend class="col-xs-12"
...
pircontroller.js中的函数:
$scope.submitPir = function () {
if ($scope.saveAllowed) {
$http.post('/Products/SubmitPirForm',
{
"__RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val(),
"model": $scope.pir
}, function (response) {
alert(result);
}
);
}
}
ProductsController.cs中的操作:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult SubmitPirForm(IVG.Data.Entities.Orders.Products.PIRModel model)
{
try
{
// ...
}
catch
{
return Json(new { status = "ERR" });
}
}
控制台显示以下错误消息: 可能未处理的拒绝:{“ data”:“ \ r \ n \ r \ n \ r \ n所需的反伪造表单字段“ __RequestVerificationToken”不存在。\ r \ n ...