在Xamarin API中向用户显示消息

时间:2018-09-11 19:50:20

标签: c# json api xamarin xamarin.forms

您有一个要使用的API(不可修改),该API会接收一些参数,如果未正确验证它们,则该API会抛出错误消息,正是我要捕获的该消息,例如,在图片中,我输入了错误的密码,并希望向用户显示该消息。

Postman

为此,创建一个名为Response的类,该类负责管理对API的不同调用

Response.cs:

 public class Response
    {
        public bool IsSuccess { get; set; }

        public string Message { get; set; }

        public object Result { get; set; }

        [JsonProperty(PropertyName = "userMessage")]
        public string userMessage { get; set; }
    }

在我的LoginViewModel中,我调用此API使用的方法,该方法在名为ApiService.cs的类中实现:

ApiService.cs:

  public async Task<Response> GetLogin(
            string urlAPILogin, string KeyLogin, string Rut, string Password)
            {
                try
                {
                    var client = new HttpClient();
                    client.BaseAddress = new Uri(urlAPILogin);
                    string url = string.Format("login/index/?k=" + KeyLogin + "&rut=" + Rut + "&password=" + Password);
                    var response = await client.GetAsync(url);

                    var result = await response.Content.ReadAsStringAsync();
                    var model = JsonConvert.DeserializeObject<Response>(result);

                    if (!response.IsSuccessStatusCode)
                    {
                        return new Response
                        {
                            IsSuccess = false,
                            Message = response.StatusCode.ToString(),
                            Result = model,
                        };
                    }

                    return new Response
                    {
                        IsSuccess = true,
                        Message = "Ok",
                        Result = model,
                    };

                }
                catch (Exception ex)
                {
                    return new Response
                    {
                        IsSuccess = false,
                        Message = ex.Message,
                    };
                }
            }

现在它是在我要绘制该消息的ViewModel(LoginViewModel)中!我尝试通过以下方式捕获它:

  var response = await apiService.GetLogin(
                urlAPILogin,
                KeyLogin,
                Rut,
                Password);


            if (string.IsNullOrEmpty(response.userMessage))
            {                
                IsRunning = false;
                IsEnabled = true;
                await dialogService.ShowMessage(
                    "Error",
                    response.userMessage);
                Password = null;
                return;
            }

但是我没有得到预期的响应(他向我绘制了空白消息!!!)

screenshoot

该对象是否带来消息!

VS2017

对我有什么帮助吗? 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

在等待响应的LoginViewModel方法中,所需的userMessage变量位于更深的一层。

当前:

// userMessage is null in your *locals* section
await dialogService.ShowMessage("Error", response.userMessage);

应为:

// This is where the wanted value is: userMessage is the desired message
await dialogService.ShowMessage("Error", response.Result.userMessage);

由于您的Result变量是 object ,因此您需要将response.Result强制转换为Response,但这应该可以解决您的问题。

应(广播):

// This is where the wanted value is: userMessage is the desired message
await dialogService.ShowMessage("Error", (response.Result as Response)?.userMessage);