我们尝试通过localhost从react-native(版本0.59)连接到API(. net core 2.2),这两个API显然运行在相同的IP、不同的端口上,react-native运行在端口8080上,而api运行在44344上,当我们从react-native获取url时,问题就发生了
我们还测试了运行的网址从 Postman 和一切似乎都很好,也从任何网络浏览器安装(狩猎/ chrome ),甚至我们测试了浏览器内部的React原生iOS,它的工作。
任何在本地主机之外运行的api都能完美地工作,我们失败的地方是本地主机。
Network request failed.
onerror
whatwg-fetch.js:504:29
dispatchEvent
event-target.js:172:43
setReadyState
XMLHttpRequest.js:580:29
__didCompleteResponse
XMLHttpRequest.js:394:25
emit
EventEmitter.js:190:12
__callFunction
MessageQueue.js:366:47
<unknown>
MessageQueue.js:106:26
__guard
MessageQueue.js:314:10
callFunctionReturnFlushedQueue
MessageQueue.js:105:17
callFunctionReturnFlushedQueue
[native code]:0
获取api的部分代码(函数),非常简单(目前)
async Submit(){
//GET METHOD
try {
let response = await fetch('https://192.168.1.56:44344/api/values');
let responseJson = await response.json();
return Alert.alert(JSON.stringify(responseJson));
} catch (error) {
console.error(error);
}
}
好的,首先,我们已经尝试了所有可能的解决方案,将我的react原生应用程序连接到我的. net核心api rest,两者都在localhost中运行,这是到目前为止的列表,我们已经尝试了到目前为止的事情,仍然没有结果。
- 本地主机
- 127.0.0.1
- 计算机ip(网络ip而不是mac地址)
- React原生空白项目(从头开始)
- API. net核心空白项目(从头开始)
- 运行小吃博览会+api. net核心
- IP转发(我们无法根据工作策略执行此操作/这不是我们正在寻找的解决方案)
- http/https
- 不同端口
- 来自react-native的Android和iOS权限
- 相同的网络不同的ip(这可以工作,但我们不知道为什么它不能在同一个ip(localhost)中运行react-native和api)
- 10.0.2.2 (for android)
- 在api.netcore上启用cors(但显然这在原生应用上不起作用,只适用于web)
- 通过ngrok/serveo公开IP(我们无法这样做,因为我们的工作策略/不是我们正在寻找的解决方案)
- 飞盘
- 阿克西奥斯
- Websocket(我们不能这样做,因为我们的工作政策/不是我们正在寻找的解决方案)
- XMLHttpRequest(状态代码错误0)
- 防火墙/代理(我们的网络没有防火墙和代理)
- Web浏览器插件(停用和/或卸载)
- 缓存/cookie
- Docker(我们不能这样做,因为我们的工作政策/不是我们正在寻找的解决方案)
- 重新启动我的macbook pro
我们期望react native获取API,因此我们可以继续Office 365登录认证。
编辑:我刚刚发现获取机器ip(这次运行windows),我的ip在api和react native上都是www.example.com,获取结果在json响应的头中显示了10.0.2.2:80。我猜这是react native的"localhost" ip。如果react native不允许我从localhost获取ip,我该怎么做呢?192.168.0.9 both on the api and the react native, the fetch result showed me the 10.0.2.2:80 in the header of the json response. I suppose it is the "localhost" ip from react native. How am I supposed to fetch an ip from localhost if react native is not letting me to do so?
编辑:这次我们不得不采用B计划,我们已经在api上使用了一个docker,但是我需要一个解决这个问题的方案。我99%确定这个问题是React原生的,没有别的。
编辑:经过这么多周,我的一所大学设法解决了这个问题。首先,我们无法使我的macbook pro的防火墙正常工作。其次,我们解决了这个问题,发现我们的api有问题。他发现重定向是在https上,认证不能正常工作,所以他改变了
"applicationUrl": "http://192.168.0.114:5001;https:192.168.0.114:5001"
到
"applicationUrl": "http://192.168.0.114:5001"
6条答案
按热度按时间vd2z7a6w1#
我在从react-native获取localhost API时遇到了同样的问题。下面是我解决这个问题的方法。在startups类中,我从Configure方法中删除了****//app.UseHttpsRedirection();。(不确定是否需要)
之后,在properties文件夹下的launchsetting.js文件中,我将
“应用程序URL”:““
到**“应用程序URL”:“http://localhost:5000“**
在React原生部分,我只是用我的IP更改了我的本地主机:
获取(“http://localhost:5000/values/”)以获取(“http://127.0.0.1:5000/values/”)
这对我完全有效
nxagd54h2#
使用命令提示符并键入ipconfig,这样我们将获得许多地址。从那里获得IPV4并将其复制到剪贴板。然后将此地址粘贴到后端端口地址和前端端口地址。例如,假设IPV4地址为192.168.1.3,然后使您的后端路由API类似于此http://192.168.1.3:8080/patients,其中8080是端口号(没关系),并对前端使用相同的端口号来获取API结果。
yh2wf1be3#
你必须做两件事。
1 -在客户端中使用http://192.168.1.x:8080(您的本地IP),而不是http://localhost:8080。
2 -将以下代码片段添加到Startup.cs中的.net core web API项目。
dgenwo3n4#
对我有效的方法是在终端中运行
adb reverse tcp:<YOUR PORT> tcp:<YOUR PORT>
我不确定它是如何工作的,但我猜它会从虚拟设备端口到您的机器端口进行某种Map。
示例:
lskq00tm5#
使用本地IP地址对我很有效,不需要额外的配置。
示例:
6yoyoihd6#
感谢所有的洞察力,但没有一个以上的解决方案为我工作。
哪些措施有效:
https://ngrok.com/-下载ngrok,注册,并连接您的帐户。ngrok创建一个私有的https localhost隧道。
设置-https://dashboard.ngrok.com/get-started/setup
解压缩以安装:
连接您的ngrok帐户(无法正常工作的示例身份验证令牌):
使用命令(带有所需的端口号):
一旦ngrok在线,替换你的本地主机地址:
转发网址(不起作用的示例地址):
我已经无数次使用ngrok在各种网络上进行测试,没有任何问题。到目前为止,它是我找到的唯一一种测试本地主机API的简单方法。