我们有一个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
}
]
}
在Xamarin.Android上,BadRequest响应的内容是否为空是否正常?有什么我可以做的,例如以不同的方式配置HttpClient,以便我收到StringContent?
编辑:我们正在使用AndroidClientHandler
。为此,我们在Android项目中添加了一个文本文件,将其BuildAction设置为AndroidResource
,将其内容设置为XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler
答案 0 :(得分: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合并并发布之前使用它,您必须:
Xamarin.Android.Net.Fix
Logger
行XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.Fix.AndroidClientHandler,MyApp.Android
(将MyApp.Android
替换为Android应用的程序集名称)