【问题标题】:Xamarin Forms HttpClient PostAsync always throw NSMallocExceptionXamarin Forms HttpClient PostAsync 总是抛出 NSMallocException
【发布时间】:2021-11-22 10:38:01
【问题描述】:

我们正在使用 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
  • 尝试在 PostMan 中执行相同的请求。这有时会给出更丰富的回应。具体与此错误无关,但有时在末尾添加 / 可以避免重定向。 (重定向可能会丢失正文 json 内容)"/t/l4x2e-1637576441/post/"
  • 您的代码看起来完全正确,我用VS 2022 , Xamarin.Forms 5 , iPhone12 simulator , iOS 15.0 测试,它工作正常,没有任何错误。
  • @ColeX-MSFT,感谢您的测试,知道什么设置会影响这个吗?我在多部 iPhone 上进行了测试。
  • 这是内存溢出错误,您的 iPhone 规格是什么?如果它太旧(例如 iPhone5),它可能会引发错误,因为它的内存量较少,请在较新的 iPhone 上尝试。

标签: ios xamarin.forms httpclient


【解决方案1】:

我遇到了完全相同的问题,并且在 VS 反馈论坛上与 Microsoft 记录了一张票。然后今天我找到了一个简单的解决方法。至少我认为这是一种解决方法,而不是解决方案。我在哪里

HttpClient client = new HttpClient() 

我改为这样做:

var handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);

还有宾果游戏,现在可以了。

【讨论】:

  • 感谢它也对我有用 :)
  • 也为我工作。如果 Microsoft 提供更多信息,您能否更新此答案?
  • 会的。自 2021 年 12 月 8 日以来,它一直在与微软进行“调查”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多