axios getリクエストContent-Typeの設定方法
1605 ワード
最近、仕事中に問題が発生しました.バックエンドで提供されるgetリクエストのインタフェースはrequest headerでContent-Typeを「アプリケーション/json」に設定する必要があります.そこで、次のように設定します.
しかし、実際の使用ではリクエストヘッダにContent-Typeを設定ことに成功していないことが判明し、ネット上の資料検索ではaxiosのソースコードに問題があるため、具体的な位置はaxios/lib/adapters/xhrである.js:
ここからrequestDataが設定されていない場合にContent-Typeの設定を削除することが分かるが、これはGetリクエスト自体がContent-Typeを必要としないためである.具体的な解決方法は以下の通りです.
インタフェースを再呼び出し、ok大成功
参考資料:https://github.com/axios/axios/issues/362 https://blog.csdn.net/qq_24729895/article/details/80367460
const http = axios.create({
method,
baseUrl,
url,
headers: {
'Content-Type': 'application/json',
},
...
})
しかし、実際の使用ではリクエストヘッダにContent-Typeを設定ことに成功していないことが判明し、ネット上の資料検索ではaxiosのソースコードに問題があるため、具体的な位置はaxios/lib/adapters/xhrである.js:
// Add headers to the request
if ('setRequestHeader' in request) {
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
// Remove Content-Type if data is undefined
delete requestHeaders[key];
} else {
// Otherwise add header to the request
request.setRequestHeader(key, val);
}
});
}
ここからrequestDataが設定されていない場合にContent-Typeの設定を削除することが分かるが、これはGetリクエスト自体がContent-Typeを必要としないためである.具体的な解決方法は以下の通りです.
const http = axios.create({
method,
baseUrl,
url,
headers: {
'Content-Type': 'application/json',
},
...
})
http.interceptors.request.use(config => {
if (config.method === 'get') {
// data if
config.data = true
}
config.headers['Content-Type'] = 'application/json'
return config
}, err => Promise.reject(err))
インタフェースを再呼び出し、ok大成功
参考資料:https://github.com/axios/axios/issues/362 https://blog.csdn.net/qq_24729895/article/details/80367460