在 Mac 上从 Visual Studio 调用 URL。 GetAsync 永远不会返回

Posted

技术标签:

【中文标题】在 Mac 上从 Visual Studio 调用 URL。 GetAsync 永远不会返回【英文标题】:Calling URL from Visual Studio on Mac. GetAsync never returns 【发布时间】:2021-07-11 13:32:23 【问题描述】:

我在 Windows 上的 Visual Studio C# 上已经多次这样做了。

现在我正在使用我的 Mac - 在 Visual Studio C# 中创建一个 Xamarin 应用程序,这个简单的代码不起作用:

using (HttpClient myClient = new())
            
                myClient.DefaultRequestHeaders.Accept.Clear();
                myClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = await myClient.GetAsync(url);
                string result = await response.Content.ReadAsStringAsync();
                return result;

网址是:“http://webcode.me”。

我尝试创建一个 URI,同样的问题。

发生的事情是,当代码行:

HttpResponseMessage 响应 = 等待 myClient.GetAsync(url);

被调用,它永远不会返回。而且应用永远不会启动。

当然,我使用的url只是一个测试url,但是调用这个方法后,我的输出窗口是这样的:

    2021-04-16 15:40:07.653142+0200 PHC.ios[3243:87620] Starting Up
Resolved pending breakpoint at 'Main.cs:35,1' to void PHC.iOS.Application.<GetBridges>d__2.MoveNext () [0x000b2].
Resolved pending breakpoint at 'Communicator.cs:44,1' to void PHC.BridgeCommunication.Communicator.<DoGet>d__4.MoveNext () [0x00189].
2021-04-16 15:40:07.664131+0200 PHC.iOS[3243:87620] Now trying URL: http://webcode.me
Resolved pending breakpoint at 'Communicator.cs:58,1' to void PHC.BridgeCommunication.Communicator.<DoGet>d__4.MoveNext () [0x001b9].
Thread started:  #2
2021-04-16 15:40:08.249780+0200 PHC.iOS[3243:87661] SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=3243
2021-04-16 15:40:08.250077+0200 PHC.iOS[3243:87661] SecTaskCopyDebugDescription: PHC.iOS[3243]/0#-1 LF=0
2021-04-16 15:40:08.259552+0200 PHC.iOS[3243:87661] [] nw_protocol_get_quic_image_block_invoke dlopen libquic failed
Thread started:  #3
Thread started:  #4
Thread started: <Thread Pool> #5
Thread started: <Thread Pool> #6

它会随着线程启动和线程停止信息永远持续下去。

“正在启动”和“正在尝试 URL:http://webcode.me”是调用此函数的类的控制台输出。在控制台中写完这些东西后,就会调用如上所示的方法。

我可以在我的 Windows Visual Studio 上运行,完全没有问题。

我不是 Mac 专家,但我想知道我的 Mac 是否以某种方式阻止了通话。防火墙已关闭。

谁能帮帮我?

【问题讨论】:

谷歌SecTaskLoadEntitlements failed error=22 cs_flags=200,例如:apple.stackexchange.com/questions/237465/… 对于HttpClient的实现,你可以查看下面的链接。安卓:docs.microsoft.com/en-us/xamarin/android/app-fundamentals/… iOS:docs.microsoft.com/en-us/xamarin/cross-platform/macios/… 感谢两位的意见。我按照链接阅读了所有相关信息。 :) 现在,我对你并不诚实,我要访问的 URL 是“https://....”。所以它是加密的。上面的 URL 是一个测试 URL,我试图看看它是否有效。所以我的问题不在于无 SSL。无论如何,我尝试了在您的链接中找到的选项 - 仍然得到同样的错误。 您是否尝试使用其他链接?还是出现同样的错误? 是的,尝试了 3 个不同的 URL。 【参考方案1】:

好的——首先。该错误与 API 调用无关。 API 调用是异步的,应用程序继续运行并遇到了该错误。

我删除了 API 调用并发现了这一点。

然后我从使用 HttpClient 更改为使用 HttpWebRequest,突然我的请求通过并很好地返回。

我仍然不知道为什么我的 HttpClient 根本不起作用,但我将关闭这张票,因为我不再需要答案了。谢谢大家的评论。

【讨论】:

以上是关于在 Mac 上从 Visual Studio 调用 URL。 GetAsync 永远不会返回的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio for Mac 中将参数传递给 Main() C#

使用 Visual Studio for Mac 使用 SpecFlow 进行 .NET Core 集成测试

Visual Studio Code 中的 PATH 变量与 Mac 上的终端不同

mac 安装 Visual Studio

“无法启动 Visual Studio”错误(在 Mac 上)

在 Visual Studio 2010 中“全部中断”后,我的 C++ 程序中大部分都缺少一些线程的调用堆栈