Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
C# 在.net mvc和angular中生成csrf令牌时出现问题_C#_Asp.net_Angularjs_Asp.net Mvc_Csrf - Fatal编程技术网

C# 在.net mvc和angular中生成csrf令牌时出现问题

C# 在.net mvc和angular中生成csrf令牌时出现问题,c#,asp.net,angularjs,asp.net-mvc,csrf,C#,Asp.net,Angularjs,Asp.net Mvc,Csrf,我遵循以下指南: 我已将此代码段添加到index.cshtml的顶部 <script> @functions{ public string TokenHeaderValue() { string cookieToken, formToken; AntiForgery.GetTokens(null, out cookieToken, out formToken); retu

我遵循以下指南:

我已将此代码段添加到index.cshtml的顶部

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;                
        }
    }
</script>
只将字符串“@TokenHeaderValue()”添加到头中

整个应用程序是一个使用Angular的SPA。唯一的.cshtml文件是用于引导和包含样式等的索引


我在这里遗漏了什么?

我可以通过将令牌设置为变量,然后在$http请求期间引用令牌来解决问题

<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;
        }
    }

    var csrfToken = '@TokenHeaderValue()';
</script>
这个方法现在对我很有效。
对于将来阅读本文的任何人,我发现了另一个解决方案:

@functions{}
用于在呈现视图时调用服务器端c#code,这就是为什么会看到一个空的脚本标记clientside。您希望Javascript出现在哪里?如果您仔细查看链接到的示例中的代码,您会发现函数块后面紧跟着一个Ajax调用……如果您查看它在客户端的呈现方式,您只会看到Ajax调用带有“硬编码”令牌头值,该值实际上是从服务器端派生的。您是否在.cshtml文件中使用了“@TokenHeaderValue”部分?还是将其放在角度控制器的.js文件中?“@TokenHeaderValue”语句应与第一个脚本部分位于同一cshtml文件中。无需将@functions指令放入脚本标记中。我刚刚创建了一个示例代码来证明它是有效的,好吧,我能够在index.cshtml文件中呈现令牌,但是我希望能够从Angular JS文件中调用它。因为它在.cshtml文件之外,所以是否有可能这样做?
<script>
    @functions{
        public string TokenHeaderValue()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;
        }
    }

    var csrfToken = '@TokenHeaderValue()';
</script>
return $http.post('/api/httpRequest1', {
     headers: {'RequestVerificationToken': csrfToken}
);