Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ajax调用中调用本地MVC4函数_Asp.net Mvc_Jquery_Asp.net Mvc 4_Antiforgerytoken - Fatal编程技术网

Asp.net mvc 如何在ajax调用中调用本地MVC4函数

Asp.net mvc 如何在ajax调用中调用本地MVC4函数,asp.net-mvc,jquery,asp.net-mvc-4,antiforgerytoken,Asp.net Mvc,Jquery,Asp.net Mvc 4,Antiforgerytoken,在我的SPA网站中,我需要通过ajax将反腐败令牌发送到服务器。我使用本文方法: 因此,在my layout.cshtml中,我有一个本地函数: <script> @functions{ public string TokenHeaderValue() { string cookieToken, formToken; AntiForgery.GetTokens(null, out cookieToken, out formTok

在我的SPA网站中,我需要通过ajax将反腐败令牌发送到服务器。我使用本文方法:

因此,在my layout.cshtml中,我有一个本地函数:

<script>
    @functions{
    public string TokenHeaderValue()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + ":" + formToken;                
    }
}
</script>
问题是我从未调用过@TokenHeaderValue,而且我一直收到这个错误:

The required anti-forgery form field "__RequestVerificationToken" is not present.

我如何解决这个问题

问题在于在单独的js文件中使用服务器端助手函数。如果需要在单独的js文件中调用ajax,请将@TokenHeaderValue设置为隐藏字段,并读取js文件中隐藏字段的值。

以JSON格式传递数据

$.ajax({
     type:"POST",
     datatype:"JSON",
     data:{d:d}, // Remaining code is same

});

并在控制器中的方法签名之前使用[HttpPost],因为它是一个Post请求。

我通过这种方式向数据添加令牌:这解决了问题

 AddAntiForgeryToken = function (data) {
            data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
            return data;
        };
 AddAntiForgeryToken = function (data) {
            data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
            return data;
        };