Xamarin Forms HttpClient PostAsync 总是抛出 NSMallocException
Posted
技术标签:
【中文标题】Xamarin Forms HttpClient PostAsync 总是抛出 NSMallocException【英文标题】:Xamarin Forms HttpClient PostAsync always throw 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 和 ***,但找不到任何帮助。我试图增加 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 上尝试。
【参考方案1】:
我遇到了完全相同的问题,并且在 VS 反馈论坛上与 Microsoft 记录了一张票。然后今天我找到了一个简单的解决方法。至少我认为这是一种解决方法,而不是解决方案。我在哪里
HttpClient client = new HttpClient()
我改为这样做:
var handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);
还有宾果游戏,现在可以了。
【讨论】:
感谢它也对我有用 :) 也为我工作。如果 Microsoft 提供更多信息,您能否更新此答案? 会的。自 2021 年 12 月 8 日以来,它一直在与微软进行“调查”。以上是关于Xamarin Forms HttpClient PostAsync 总是抛出 NSMallocException的主要内容,如果未能解决你的问题,请参考以下文章
HttpClient 非常慢 - Xamarin Forms
Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)
HttpClient.SendAsync 在 Xamarin.Forms Android 上引发 ObjectDisposedException,但在 UWP 上却没有
Xamarin Forms Fusillade Refit - 使用单个 HttpClient 实例
Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?