您有一个要使用的API(不可修改),该API会接收一些参数,如果未正确验证它们,则该API会抛出错误消息,正是我要捕获的该消息,例如,在图片中,我输入了错误的密码,并希望向用户显示该消息。
为此,创建一个名为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;
}
但是我没有得到预期的响应(他向我绘制了空白消息!!!)
该对象是否带来消息!
对我有什么帮助吗? 我在做什么错了?答案 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);