我正在使用 axios 开发一个 expo go 应用程序,我正在尝试连接到我当前正在构建的 api,但我收到了这个 [AxiorError:网络错误]。 我是 React Native 开发的新手,但我已经从事移动开发,我的 url 是有效的(我还使用模拟器的浏览器进行了测试,因此它通过模拟器网络访问 api 并获得正确的结果)
我使用的是安卓
这是我的代码:
import axios from "axios";
const api = axios.create({
baseURL: 'http://192.xxx.x.x:81/api'
});
export default api;
我有这个方法:
import api from "./Api";
export async function searchMenu() {
const response = await api.get('/menu');
return response.data;
}
我打电话给它
import { searchMenu } from "@/services/MenuApi"
export default function Home(){
console.log(searchMenu())
}
编辑: 这是我打电话时的结果:
searchMenu().then(console.log).catch((err) => console.log(err.response?.data, err.toJSON()))
LOG undefined {"code": "ERR_NETWORK", "columnNumber": undefined, "config": {"adapter": [Function xhrAdapter], "baseURL": "http://192.168.0.3:81/api", "data": undefined, "env": {"Blob": [Function Blob], "FormData": [Function FormData]}, "headers": {"Accept": "application/json, text/plain, */*"}, "maxBodyLength": -1, "maxContentLength": -1, "method": "get", "timeout": 0, "transformRequest": [[Function transformRequest]], "transformResponse": [[Function transformResponse]], "transitional": {"clarifyTimeoutError": false, "forcedJSONParsing": true, "silentJSONParsing": true}, "url": "/menu", "validateStatus": [Function validateStatus], "xsrfCookieName": "XSRF-TOKEN", "xsrfHeaderName": "X-XSRF-TOKEN"}, "description": undefined, "fileName": undefined, "lineNumber": undefined, "message": "Network Error", "name": "AxiosError", "number": undefined, "stack": "AxiosError: Network Error
我认为您需要更改 Android 清单文件以支持 HTTP 请求,默认情况下 Android 仅支持 HTTPS 请求,我可以看到您的
baseUrl
仅基于 HTTP。
尝试将usesCleartextTraffic放入您的应用程序标签中
<application
...
android:usesCleartextTraffic="true"
...
/>
如果有的话,您也可以尝试使用 HTTPS 的 API,它将无需任何更改即可运行
https://192.xxx.x.x:81/api
弄清楚了,问题出在我的 API 中:
如果有人使用 .net6+ 的 ASP.NET API 并遇到此问题,请在您的 Program.cs 文件中注释以下行:
app.UseHttpsRedirection();
我仍然不知道为什么该网址在模拟器浏览器中有效,但在模拟器应用程序中无效,但现在可以工作了