【问题标题】:StringContent is empty on Xamarin.AndroidXamarin.Android 上的 StringContent 为空
【发布时间】:2016-08-18 06:36:37
【问题描述】:

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

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

问题是在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>();
    }

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

{
  "errors": [
    {
      "message": "MyBuddy not found!",
      "code": 9
    }
  ]
}

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

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

【问题讨论】:

    标签: asp.net-web-api xamarin xamarin.android httpclient


    【解决方案1】:

    这是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 合并发布之前使用它,您必须:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多