【问题标题】:VueJS + Axios Post request not passing parameter valueVueJS + Axios Post请求未传递参数值
【发布时间】:2021-10-13 06:32:06
【问题描述】:

我有一个 API 可以更新数据库中的数据,然后返回一个查询。该 API 采用单个参数,并且在通过浏览器手动测试以及使用 axios get 请求进行测试时可以正常工作。但是出于安全目的,我想尝试坚持使用 POST 请求并对其进行测试,但是如果我尝试通过 POST(将 axios.get 更改为 axios.post)请求运行它,则参数值不会传递给 API .下面是我的 axios 请求。可能是什么问题?

                axios.post(window.location.origin + '/API/StateContacts', {
                    params: {
                        STATE_DD_INPUT: stateDD
                    }
                })
                    .then(response => {
                        this.stateContactsArray = response.data;
                    }).catch(error => {
                        console.log(error.response.data.error);
                    });

【问题讨论】:

    标签: javascript vue.js asp.net-core asp.net-web-api axios


    【解决方案1】:

    axios post 第二个参数已经是你要传递的数据了。来自

    axios.post(window.location.origin + '/API/StateContacts', {
                        params: {
                            STATE_DD_INPUT: stateDD
                        }
                    })
    

    到

    axios.post(window.location.origin + '/API/StateContacts', {
                            STATE_DD_INPUT: stateDD
                        })
    

    应该能解决你的问题

    编辑

    你评论了:

    但是,如果我这样做并添加 {} 它可以工作,但不知道为什么。

    axios.post(window.location.origin + '/API/StateContacts', {}, { params: { STATE_DD_INPUT: stateDD } }) .then(response => { this.stateContactsArray = response.data; }).catch(error => { console.log(error.response.data.error); });
    

    这是因为signature 的axios.post 函数是:

    axios.post(url[, data[, config]])
    
    

    不是传递data 作为第二个参数,而是传递第三个参数config。 config 对象具有 parameters 键,它将向您的请求添加以下查询参数:

    http://localhost/API/StateContacts?STATE_DD_INPUT=xxx
    

    查询字符串将是STATE_DD_INPUT。

    由于我们不知道您的后端,我们假设您正在使用一种方法从请求中获取查询字符串,而不是请求正文。 Laravel 之类的框架会查看查询字符串和正文以查找您搜索的内容。例如

    $request->get('STATE_DD_INPUT')
    

    您可能正在使用具有两种不同方法的框架。一个获取查询参数(例如从 URL - https://localhost/API/StateContacts?STATE_DD_INPUT=xxxx)和另一个从正文获取(例如在正文请求中发送的那个 - 请参阅docs了解有关 POST 正文的更多信息)。所以,也许在你的后端代码的某个地方你会有

    $request->body('STATE_DD_INPUT')
    

    为了能够从查询字符串中获取请求,您应该有一些方法可以做到这一点。例如

    $request->query('STATE_DD_INPUT')
    

    【讨论】:

    • 由于某种原因无法解决。仍然没有传递参数。但是,如果我这样做并添加一个 {} 它可以工作,但不知道为什么。 axios.post(window.location.origin + '/API/StateContacts', {}, { params: { STATE_DD_INPUT: stateDD } }) .then(response => { this.stateContactsArray = response.data; }).catch(错误 => { console.log(error.response.data.error); });
    • @Bradyboyy88 我已更新我的问题以回答此评论。如果此答案回答了您的问题,请将其标记为正确答案
    • 我正在通过您的回答来完全理解,但仅供参考,我使用的是 asp.net 核心 web api 控制器。
    • 你能在你的帖子中解释一下这种格式是什么 axios.post(url[, data[, config]]) 吗?添加 {} 有效,但我查看了您发布的内容我不清楚这种语法。这是否是说 URL 包含一个包含配置数组的数据数组,而我的参数位于我的 API 必须考虑的配置数组中,以及它工作的原因?
    • 而且在我的 Web API 中我使用 FromQuery 那么为什么配置中的参数有效?
    【解决方案2】:

    是否要在标头中传递参数?

    axios.post(window.location.origin + '/API/StateContacts', {
        headers: {
            'Content-Type': 'application/json',
            'STATE_DD_INPUT': stateDD
        }
    })      
    .then((response) => {
        console.log(response.data)
    })
    .catch((error) => {
        console.log(error);
    })
    

    【讨论】:

    • 有什么理由在标题中传递它而不是其他东西(假设正文)? http 请求相对较新,因此不确定一个是否比另一个更受青睐。
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2019-01-03
    • 2017-11-20
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多