如何在 Xamarin.Forms 应用程序中组织服务中的 HTTP 响应

Posted

技术标签:

【中文标题】如何在 Xamarin.Forms 应用程序中组织服务中的 HTTP 响应【英文标题】:How to organize HTTP Responses in a Service in Xamarin.Forms app 【发布时间】: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。你不能返回一些字符串 您可以更改返回类型,这取决于您。 【参考方案1】:

您可以返回带有属性 responseStatusCode 的 CheckedUser 而不是返回 null。

在您的 CheckedUser 中,添加一个新属性让我们这么说 响应状态代码。然后你不需要返回null,你可以 返回一个带有 responseStatusCode 的新 CheckedUser。之后你可以 每次收到响应时检查 responseStatusCode。

【讨论】:

以上是关于如何在 Xamarin.Forms 应用程序中组织服务中的 HTTP 响应的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin.Forms:如何在 Xamarin.Forms 跨平台项目中开发具有蓝牙连接的应用程序?

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

如何在 Xamarin.Forms 中获取/检测屏幕大小?

如何在 xamarin.forms 中获取状态栏高度?

如何在 Xamarin.Forms.UITesting 中触发/调试后门功能?