使用axios 0.17.1和M VC 3/4/5未正确发送__RequestVerificationToken

问题描述 投票:2回答:2

我从项目中删除了jQuery以支持axios,但是当我尝试验证__RequestVerificationToken时,控制器响应:

所需的防伪表单字段“__RequestVerificationToken”不存在

我看到数据以json格式发送,jquery作为表单数据发送。

Controller有没有办法检测json格式,还是需要在发送之前序列化数据?

axios({
      url: '/api/controller/method',
      data: {
        __RequestVerificationToken,
        otherData
      },
      method: 'post'
    })
jquery json asp.net-mvc axios antiforgerytoken
2个回答
3
投票

我们为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”表单的函数。

现在服务器正确接收令牌。


0
投票

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}));
© www.soinside.com 2019 - 2024. All rights reserved.