На стороне клиента
Вместо того, чтобы сделать это в два этапа:
var result = await WebApiHelper.Client.PostAsync("users/verifyLoginCredentials", content);
/*1: read as string*/string resultContent = await result.Content.ReadAsStringAsync();
/*2: deserialize*/ var user = (User)JsonConvert.DeserializeObject(resultContent);
Вы можете сделать это за один шаг:
var result = await WebApiHelper.Client.PostAsync("users/verifyLoginCredentials", content);
/*1: read as User*/User resultContent = await result.Content.ReadAsAsync<User>();
Это, однако:
if (result.IsSuccessStatusCode)
{
return true;
}
Необходимо проверить перед тем, как попытаться десериализовать, в противном случае вы бы попытались десериализовать "Ошибка входа в систему" как объект пользователя - что, конечно, недопустимо.Итак:
public static async Task<bool> VerifyCredentials(string userLogin, string password)
{
var value = new Dictionary<string, string>
{
{ "userLogin", userLogin },
{ "password", password }
};
var test = Newtonsoft.Json.JsonConvert.SerializeObject(value);
var content = new StringContent(test, Encoding.UTF8, "application/json");
var result = await WebApiHelper.Client.PostAsync("users/verifyLoginCredentials", content);
if (result.IsSuccessStatusCode)
{
return true;
}
User resultContent = await result.Content.ReadAsAsync<User>();
return false;
}
Я не уверен, выиграете ли вы что-нибудь в результате этой десериализации, хотя
На стороне сервера
Этот код здесь:
var verificationResult = Models.User.VerifyLoginCredentials(username, password, out user);
HttpContent responseContent = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(user));
if (verificationResult)
{
return Ok(responseContent);
}
Слишком сложный.Web API уже JSON-сериализует модель по умолчанию, вам не нужно делать все это.Вместо этого:
var verificationResult = Models.User.VerifyLoginCredentials(username, password, out user);
if (verificationResult)
{
return Ok(user);
}
Кроме того, вы должны использовать надлежащий объект передачи данных (DTO) вместо получения словаря, который вы не можете проверять на платформе Framework, но это еще одна проблема.