我从项目中删除了jQuery以支持axios,但是当我尝试验证__RequestVerificationToken时,控制器响应:
所需的防伪表单字段“__RequestVerificationToken”不存在
我看到数据以json格式发送,jquery作为表单数据发送。
Controller有没有办法检测json格式,还是需要在发送之前序列化数据?
axios({
url: '/api/controller/method',
data: {
__RequestVerificationToken,
otherData
},
method: 'post'
})
我们为axios添加一个配置文件,并添加一个插件"qs"来对查询进行字符串化。
import qs from 'qs'
import axios from 'axios'
import fd from '../FormDataBuilder'
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
axios.defaults.paramsSerializer = p => qs.stringify(p, { allowDots: true })
axios.defaults.transformRequest = [d => typeof d === 'object' ? d.formdata ? fd(d) : qs.stringify(d, { allowDots: true }) : d]
export default axios
FormDataBuilder是“formdata”表单的函数。
现在服务器正确接收令牌。
将qs添加到您的项目中(npm install qs --save)
在你的.html中:
<div id="token">@Html.AntiForgeryToken()</div>
在您的组件vue.js中:
在开始时:
import qs from 'qs'
import axios from "axios"
在功能:
let token = document.querySelector('token, input').getAttribute('value');
axios.post( "/api/controller/method", qs.stringify({ '__RequestVerificationToken': token}));