Xamarin Forms HttpClient PostAsync总是抛出NSMallocException异常。

5
我们正在使用Xamarin Forms 5和Visual Studio 2022为iOS和Android构建移动应用程序。当我们向任何API发出Post请求时,无论是自己的还是外部的API,我们总是会收到以下错误信息:Xamarin.PreBuilt.iOS[3728:2199180] Xamarin.iOS: Received unhandled ObjectiveC exception: NSMallocException Failed to grow buffer
GET请求正常工作。我已经在Google和StackOverflow上搜索了一些帮助,但没有找到解决方法。我尝试了增加HttpClient.MaxResponseContentBufferSize,但没有任何改变。
目前这个应用程序非常简单,只有一个按钮测试页面。代码如下:
public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void Button_Clicked(object sender, EventArgs e)
        {
            var client = new HttpClient();
            client.BaseAddress = new Uri("https://ptsv2.com/");

            string jsonData = @"{}";

            var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PostAsync("/t/l4x2e-1637576441/post", content);

            var result = await response.Content.ReadAsStringAsync();
        }
    } 

这在iOS链接设备上失败,但对于Android模拟器则可以工作。是否有任何需要更改的内容以使其在iOS上运行?

更新

这段代码在多台机器上都能正常工作,除了我的机器。我正在尝试找出可能的设置问题,如果您有任何想法,将不胜感激。


在VS输出窗格中,您是否看到了异常后的堆栈转储?如果是这样,请将堆栈转储添加到您的问题中。谷歌显示这有时是iOS上各种库的问题。我唯一看到的特定原因是内存耗尽。谷歌搜索“Received unhandled Objective C exception: NSMallocException Failed to grow buffer”。 - ToolmakerSteve
尝试在PostMan中执行相同的请求。这有时会提供更详细的响应。虽然与此错误无关,但有时在末尾添加/可以避免重定向。(重定向可能会丢失正文JSON内容)"/t/l4x2e-1637576441/post/" - ToolmakerSteve
1
你的代码看起来完全正确,我使用 VS 2022、Xamarin.Forms 5、iPhone12 模拟器和 iOS 15.0 进行了测试,它没有任何错误,并且能够正常工作。 - ColeX
1
@ColeX-MSFT,感谢您的测试,有什么设置可能会影响这个问题吗?我在多个iPhone上进行了测试。 - Bartvandee
1
这是一个内存不足的错误,你的iPhone配置如何?如果它太旧了(例如iPhone5),可能会因为RAM容量较少而导致该错误,尝试在较新的iPhone上进行测试。 - ColeX
显示剩余3条评论
1个回答

4

我曾经遇到过完全相同的问题,已在VS反馈论坛上提交了工单。今天我找到了一个简单的解决方法。至少我认为它是一个解决方法而不是一个解决方案。我遇到问题的地方是:

HttpClient client = new HttpClient() 

我改为执行以下操作:
var handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);

现在,它可以正常工作了。


也对我有用。如果微软提供更多信息,你能更新这个答案吗? - tg24
会处理这个问题。自2021年12月8日起,它一直在与 Microsoft 进行调查。 - Graeme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接