vue.js - Vue.js 上不允许 Axios Post 返回 405 方法
问题描述
我正在尝试从带有 axios 的 Vue.js 应用程序对 NET CORE 5 服务(托管在 IIS 10 上)发出 POST 请求。
当我使用 POSTMAN 测试服务时,它运行良好,但使用 Axios 我总是从服务器获得 405。
用提琴手分析请求看起来非常不同。在 axios 请求中,缺少内容类型标头,并且方法是 OPTIONS 而不是 POST。
这是邮递员的请求:
POST https://localhost/apiluxor/api/SignIn HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.28.4
Accept: */*
Postman-Token: acfed43c-731b-437b-a88a-e640e8216032
Host: localhost
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 55
{
"username":"user",
"password":"testpw"
}
这是 axios 请求:
OPTIONS https://localhost/apiluxor/api/SignIn HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: */*
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://172.16.1.110:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
Sec-Fetch-Dest: empty
Referer: http://172.16.1.110:8080/
Accept-Encoding: gzip, deflate, br
Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
在我的 Vue.js 模块中,我尝试在主配置和发布请求中强制设置“内容类型”,但没有结果。
import { App } from "vue";
import axios from "axios";
import VueAxios from "vue-axios";
import JwtService from "@/core/services/JwtService";
import { AxiosResponse, AxiosRequestConfig } from "axios";
class ApiService {
public static vueInstance: App;
public static init(app: App<Element>) {
ApiService.vueInstance = app;
ApiService.vueInstance.use(VueAxios, axios);
ApiService.vueInstance.axios.defaults.baseURL =
"https://localhost/apiluxor/api";
ApiService.vueInstance.axios.defaults.headers.post["Content-Type"] =
"application/json";
}
public static setHeader(): void {
ApiService.vueInstance.axios.defaults.headers.common[
"Authorization"
] = `Bearer ${JwtService.getToken()}`;
}
public static post(
resource: string,
params: AxiosRequestConfig
): Promise<AxiosResponse> {
return ApiService.vueInstance.axios.post(resource, params, {
headers: { "content-type": "application/json" },
});
}
export default ApiService;
我对 Vue.js 很陌生,所以也许我遗漏了一些东西。
解决方案
要在 post 请求的正文中以 JSON 格式发送数据,只需在 axios 选项中添加一个参数“data”。Axios 会自动将 content-tpe 设置为适合您的值。
// Simple example
axios.post(myUrl, {
data: {
"username":"user",
"password":"testpw"
}
});
这应该有预期的结果:)
推荐阅读
- c# - 如何在 C# 中使用 NAudio 播放曲目列表
- javascript - 在 if 语句中使用多个条件
- json - 如何使用 javascript 从 Adobe Animate CC 中的其余端点加载 json
- android - Android Presenter 测试 IllegalStateException captor.capture() 不能为 null
- ruby-on-rails - 链接到以 HTML 格式呈现的 CSV
- java - 如何在不使用 Jsoup 的情况下解析 html 文件?
- c++ - 使用 MinGW 设置 SFML 时遇到问题
- excel - Excel VBA XML : Selecting a given tag value in a loop when nodes have attributes
- javascript - 尝试如果用户选择一个文件,则创建一个元素,但它被加倍
- c++ - How to fix makefile to properly include -lcrypto to avoid linker error: undefined reference to `EVP_CIPHER_CTX_new'