StringContent在Xamarin.Android上为空

Mar*_*ean 6 httpclient xamarin.android asp.net-web-api xamarin

我们有一个Azure WebApi服务,有时可以像这样返回BadRequest

return BadRequest("{\"errors\":[{\"message\":\"MyBuddy not found!\",\"code\":9}]}");
Run Code Online (Sandbox Code Playgroud)

问题是在Xamarin.Android上,使用System.Net.Http.HttpClient,我们收到的响应内容为空.

这是我们的代码:

private static async Task<int> ReadErrorCodeAsync(HttpResponseMessage response)
    {
        var x = response.ReasonPhrase;
        var errorSerialized = await response.Content.ReadAsStringAsync();
        var error = JObject.Parse(errorSerialized);

        return ((JArray)error["errors"])[0]["code"].Value<int>();
    }
Run Code Online (Sandbox Code Playgroud)

但是errorSerialized总是一个空字符串.我们还使用Swagger UI,响应内容就是我们所期望的,例如:

{
  "errors": [
    {
      "message": "MyBuddy not found!",
      "code": 9
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在Xamarin.Android上,BadRequest响应的内容是否为空是否正常?有什么我可以做的,例如以不同方式配置HttpClient,以便我收到StringContent?

编辑:我们正在使用AndroidClientHandler.为此,我们在Android项目中添加了一个文本文件,将其BuildAction设置AndroidResource为其内容XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Sve*_*übe 3

这是 中的一个错误AndroidClientHandler。它没有正确读取错误响应。(请参阅https://github.com/xamarin/xamarin-android/blob/master/src/Mono.Android/Xamarin.Android.Net/AndroidClientHandler.cs#L308

我已经修好了。希望他们能尽快合并它:) https://github.com/xamarin/xamarin-android/pull/180

如果您需要在 Xamarin 合并并发布之前使用它,您必须:

  • 将此文件夹复制到 Android 项目中的某个文件夹中
  • 将所有文件中的命名空间更改为Xamarin.Android.Net.Fix
  • 删除或注释所有Logger导致编译错误的行
  • 将环境文件的内容更改为XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.Fix.AndroidClientHandler,MyApp.Android(替换MyApp.Android为 Android 应用程序的程序集名称)