【发布时间】:2020-10-07 12:51:58
【问题描述】:
我正在开发 Xamarin.Forms 应用程序。我的示例请求之一是:
public async Task<CheckedUser> CheckUserAccount(User user)
{
try
{
if (CrossConnectivity.Current.IsConnected)
{
clientMoeZdravje.DefaultRequestHeaders.Clear();
clientMoeZdravje.DefaultRequestHeaders.Add("Accept", "application/json");
var postData = JsonConvert.SerializeObject(user);
var response = await clientMoeZdravje.PostAsync($"api/User/CheckUser", new StringContent(postData, Encoding.UTF8, "application/json"));
if (response.IsSuccessStatusCode)
{
string jsonMessage;
using (Stream responseStream = await response.Content.ReadAsStreamAsync())
{
jsonMessage = new StreamReader(responseStream).ReadToEnd();
}
CheckedUser responseData = (CheckedUser)JsonConvert.DeserializeObject(jsonMessage, typeof(CheckedUser));
return responseData;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
string error = ex.Message;
return null;
}
}
如您所见,如果 StatusCode 为 200,我返回 User 对象或返回 null,但 null 表示没有互联网连接和错误请求。我不知道如何组织我收到的每一个回复。例如,如果 StatusCode 是 400/500/404 等返回字符串 message ,或者如果没有 Internet 连接返回消息 NoInternet ,也适用于 Exceptions 返回消息。组织这个的最佳做法是什么?
【问题讨论】:
-
没有单一的“最佳实践”。如果收到非 200 响应,某些 API 会抛出异常。有些人会使用带有响应代码和错误消息属性的包装器对象以及实际的数据对象。还有其他方法。
-
@Jason 添加带有函数的 Interfeca 是否很好,每个模型(类)都导入该接口并有一个字段 error_string 将返回
-
可以查看else条件下的response.statuscode并给出相应的响应。
-
@JackHua-MSFT 但你可以返回 Object 或 null。你不能返回一些字符串
-
您可以更改返回类型,这取决于您。
标签: rest web-services http xamarin.forms httpclient