【发布时间】:2021-03-06 19:25:21
【问题描述】:
我看到了一些类似的问题,但这里似乎没有什么完全符合我的问题。
我正在本地运行我的 API (C#) 版本来测试一些更新。它连接到本地 SQL 数据库。
当我运行查询以获取令牌时,邮递员按预期工作。但是,当我启动我的 android 模拟器 (xamarin) 并运行相同的查询时,请求几乎立即超时,错误代码为 0。我已将其设置为根本不超时。另一个奇怪的是,当我在本地 API 中设置断点时,postman 会触发这些断点,但 android 应用不会。
这很奇怪,因为邮递员和 android 应用都可以在服务器中查询 API 的实时版本。
我听说这可能是 CORS 问题?
重现问题的步骤:
- 启动本地 API,将网页打开到本地端口。
- 通过使用邮递员发送请求来测试端口是否正常工作。我尝试的请求是请求令牌。
- 使用 postman 生成 restsharp 代码,并从 xamarin android 项目中运行该代码。
我得到的错误总是状态码 0。
代码:
以下代码是在请求成功后通过邮递员生成的。
var client = new RestClient("http://localhost:53884/token");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Cookie", ".AspNet.Cookies=7u9...JRrb");
request.AddParameter("username", "redacted");
request.AddParameter("password", "redacted2");
request.AddParameter("grant_type", "password");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
由于 IP 的原因,我无法共享 API 代码,但它在服务器上运行时适用于应用程序,并且适用于本地和邮递员。
【问题讨论】:
-
“假设”您在 Android 应用中使用
localhost连接到本地托管服务?即模拟器上的localhost是模拟器本身,而不是托管模拟器的PC -
“有些东西有效,有些东西不...弄清楚我的问题是什么”谜题并不是真正的主题。您需要edit 问题的详细信息,以便人们理解并理想地预先产生问题。 “运行查询以获取令牌”实际上并不是对问题的具体描述——实际上,将所有可能的问题缩小到只是 HTTP 请求的所有可能问题是朝着解释具体问题迈出的重要一步得到答案。
-
@SushiHangover 我没有想到这一点。这可以解释为什么请求永远不会到达 API。我会调查一下并报告。
-
有数百个问题,如果不是更多,处理使用 localhost 从移动应用程序查询服务的问题。几乎普遍的答案是“使用 IP 或 FQDN”