我在 Xamarin Forms 应用程序中使用以下代码:
HttpResponseMessage response = null;
try
{
HttpContent content = new StringContent(JsonConvert.SerializeObject(register), Encoding.UTF8, "application/json");
response = await client.InvokeApiAsync("register", content, HttpMethod.Post, null, null);
if (!response.IsSuccessStatusCode)
{
string error = await response.Content.ReadAsStringAsync();
var def = new { Message = "" };
var errorMessage = JsonConvert.DeserializeAnonymousType(error, def);
return KloverResult.BuildError(true, errorMessage.Message);
}
}
catch (MobileServiceInvalidOperationException e)
{
if (e.Response.StatusCode == System.Net.HttpStatusCode.InternalServerError)
{
string error = await e.Response.Content.ReadAsStringAsync();
var def = new { Message = "" };
var errorMessage = JsonConvert.DeserializeAnonymousType(error, def);
return KloverResult.BuildError(true, errorMessage.Message);
}
else
{
return KloverResult.BuildError(false, "Invalid username or password");
}
}
我遇到的问题是由于 500 而引发 MobileServiceInvalidOperationException。当我尝试读取响应的内容(e.Response.Content)时,它为空。当我使用 Restlet 调用相同的 API 时,我得到以下响应:
{
"Message": "Name jblogs is already taken."
}
这是我期望在我的错误变量中的内容,但它为空。
我的问题是,我应该能够阅读响应的内容吗?如果是这样,我是否需要在客户端/服务器上进行更多设置?被调用的 API 使用以下方式从 webapi 返回错误:
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Name jblogs is already taken.");
任何帮助,将不胜感激。