ValidateAntiForgeryToken抱怨该字段不存在

时间:2019-07-13 14:59:27

标签: c# jquery ajax asp.net-mvc

我在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 ...

0 个答案:

没有答案