如何设置jQuery Ajax调用以在Asp.Net MVC中的thair请求头中全局注入AntiForgeryToken
我在Asp.net MVC 5
项目上工作,并且知道有两种方法可以在ajax
调用AntiForgeryToken
传递给服务器:
- 把它放在
Header
- 把它放在
Data
我喜欢在
request header
放入AntiForgeryToken
,我的代码在客户端和服务器端都很好用。 我跟着这篇文章 。
我把AntiForgeryToken
放在每个$.ajax
调用header
,它运行良好
但
现在我决定编写新代码,将AntiForgeryToken
添加到全局页面中具有POST
类型的所有Ajax
调用,并删除每个$.ajax
代码块中的标头设置。
然后我写了这些代码来实现我的决定,当我在我的页面中有一个表单时, 它也很有效 (我没有在诸如页面中的多个表单等集合的情况下测试它…):
var antiForgerytoken = $('input[name="__RequestVerificationToken"]').val(); $.ajaxPrefilter(function (options, originalOptions, jqXhr) { if (options.type.toUpperCase() == "POST") { jqXhr.setRequestHeader("__RequestVerificationToken", antiForgerytoken); } });
我的问题:
- 这个决定有任何安全性或不恰当的副作用吗?
- 当我在我的页面中有多个表单 ,每个表单由不同的局部视图创建并将通过不同控制器中的不同操作处理时,我应该在每个表单中找到相关的
AntiForgeryToken
并将其注入到与该表单相关的所有Ajax调用中吗? 或者只是上面的代码就足够了?
也许这个问题的基础是写在这里的另一个问题, @ DarinDimitrov回答它包括这个描述:
ASP.NET MVC
将简单地为所有表单重用相同的值,因此它不需要知道发送请求的表单以validation它
这个规则是绝对的吗? 你知道参考吗? 我在@DarinDimitrov回答的评论中看到了一些相反的观点
- 如果我应该分别对每个表单
AntiForgeryToken
行为,我应该如何更改上面的代码以全局设置Ajax头中的AntiForgeryToken
以使用在MVC
页面中呈现的所有表单?