Flutter 物理 iOS 设备无法向我的本地 asp.net 服务器发出 api 请求

Posted

技术标签:

【中文标题】Flutter 物理 iOS 设备无法向我的本地 asp.net 服务器发出 api 请求【英文标题】:Flutter physical iOS device unable to make api request to my local asp.net server 【发布时间】:2022-01-24 04:18:28 【问题描述】:

当我从物理 ios 设备调试我的应用程序并尝试向我的本地服务器发出请求时,我收到了这个在 iOS 模拟器上没有出现的错误:

SocketException (SocketException: OS Error: Connection denied, errno = 61,地址 = 192.168.1.186,端口 = 56740)

该端口应该是我的服务器端口吗?那是 5001。

我可以在 dart 开发工具调试器中看到发送了这个请求:

GET https://192.168.1.186:5001/fashionitems/search?searchTerm=Fa&currentPage=1&pageSize=10

这是正确的 URL,并且适用于 iOS 模拟器,因此看起来它正在发送正确的请求。

我正在使用 asp.NET 6 作为服务器。

我觉得问题出在我的服务器上,因为 google maps API 请求是在物理设备上运行的。当 asp.NET 6 应用程序在模拟器上运行而不是在物理设备上运行时,我会查看它的哪个部分?

我可以通过什么来解决这个问题?

编辑:在 Flutter 中,我看到如果在物理设备上进行测试,我们应该使用 ip 地址而不是“localhost”。所以我就这么做了。有趣的是,IP 地址不适用于 iOS 模拟器,只有 'localhost' 可以。我不认为应该是这种情况。

Wifi 是 starlink,虽然我认为这不会有什么不同。我无法使用移动数据热点进行测试。

服务器连接字符串是:

  "ConnectionStrings": 
    "DefaultConnection": "Server=localhost;Port=5432;Database=vepo_dev_db;User Id=postgres;Password=password;Include Error Detail=true"
  ,

在 asp.net 应用程序上:

launchSettings.json


  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": 
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": 
      "applicationUrl": "http://localhost:53210",
      "sslPort": 44301
    
  ,
  "profiles": 
    "IIS Express": 
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": 
        "ASPNETCORE_ENVIRONMENT": "Development"
      
    ,
    "Vepo": 
      "commandName": "Project",
      "dotnetRunMessages": "true",
      "launchBrowser": true,
      "launchUrl": "GroceryItems",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": 
        "ASPNETCORE_ENVIRONMENT": "Development"
      
    
  

【问题讨论】:

你的物理设备和.Net服务器是否通过wifi在同一个网络上? @Dev 他们都连接到同一个WIFI网络。我的笔记本 ipv4 是 192.168.1.186,我的 iPhone ipv4 是 192.169.1.118。 我认为有一些问题 192.168.1.186 和 192.169.1.118 是不同的网络系列。禁用 sim 数据并再次验证。尝试从笔记本电脑ping 192.169.1.118,看看它是否可以ping iphone @Dev 我打错了。 iPhone 是 192.168.1.118。道歉 检查防火墙是否阻止端口 5001。它很可能只是网络问题。 【参考方案1】:

改变

"applicationUrl": "https://localhost:5001;http://localhost:5000",

"applicationUrl": "https://0.0.0.0:5001;http://localhost:5000",

【讨论】:

太好了,它正在工作!非常感谢! 欢迎兄弟。乐于助人。

以上是关于Flutter 物理 iOS 设备无法向我的本地 asp.net 服务器发出 api 请求的主要内容,如果未能解决你的问题,请参考以下文章

向我的项目添加风味后,我无法初始化 Flutter for web

Flutter Geolocator 无法在 Android 上运行,但可以在 iOS 上完美运行

如何从我的物理 Android 设备访问我的本地主机?

Flutter 应用程序无法在真实的 iOS 设备上运行(白屏)

Flutter 加载本地文件在Android设备报错

Flutter iOS 物理设备错误:Command PhaseScriptExecution failed with a nonzero exit code