__RequestVerificationToken axios 0.17.1 和 MVC 3/4/5 未正确发送
__RequestVerificationToken not sent correctly with axios 0.17.1 and MVC 3/4/5
我从项目中删除了 jQuery 以支持 axios,但是当我尝试验证 __RequestVerificationToken 时,控制器响应:
The required anti-forgery form field "__RequestVerificationToken" is not present
我看到数据以 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)
在您的 .chtml 中:
<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}));
我从项目中删除了 jQuery 以支持 axios,但是当我尝试验证 __RequestVerificationToken 时,控制器响应:
The required anti-forgery form field "__RequestVerificationToken" is not present
我看到数据以 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)
在您的 .chtml 中:
<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}));