C# 在.net mvc和angular中生成csrf令牌时出现问题
我遵循以下指南: 我已将此代码段添加到index.cshtml的顶部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
<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}
);