API: response.content.readasasync<authenticateduser>() возвращает "null"
Эта строка кода:
await response.Content.ReadAsAsync<AuthenticatedUser>();возвращает "null", когда он должен возвращать <AuthenticatedUser> с именем пользователя и паролем.
Я видел здесь похожую проблему:Response.content.readasasync возвращает null[^однако полученный ответ мне не помог.
Что я уже пробовал:
Вот что у меня есть на данный момент:
public async Task<AuthenticatedUser> Authenticate(string username, string password) { var data = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "password"), new KeyValuePair<string, string>("username", username), new KeyValuePair<string, string>("passsword", password) }); using (HttpResponseMessage response = await apiClient.PostAsync("/token", data)) { if (response.IsSuccessStatusCode) { var result= await response.Content.ReadAsAsync<AuthenticatedUser>(); return result; } else { throw new Exception(response.ReasonPhrase); } } }
Я попробовал заменить
await response.Content.ReadAsAsync<AuthenticatedUser>();
с
await response.Content.ReadAsAsync<object>();, что в свою очередь потребовало изменения пустоты и интерфейса на
Task<object>, тоже. Но безрезультатно.
Я тоже попробовал заменить
var
с AuthenticatedUser
и это тоже не сработало. Есть идеи, как обойти эту проблему?
Member 14575056
Я не знаю, важно ли это, но я использую этот метод в другом классе - LoginViewModel, где я применяю параметры имени пользователя и пароля к пустоте Authenticate (). Я убедился, что значения из текстовых полей проанализированы правильно.
Richard MacCutchan
Используйте отладчик, чтобы точно увидеть, что возвращается в ответе.
Member 14575056
Спасибо.Я только что обнаружил, что var "data" в Authenticate() также равен нулю, и я думаю, что именно поэтому "response" тоже равен нулю. Однако "имя пользователя" и "пароль" были отправлены в var "data" правильно. В чем может быть проблема?
Richard MacCutchan
Итак, это должно сказать вам, что что-то не так в процессе аутентификации на сервере. Данные, которые вы отправляете, неверны или в неправильном формате и т. д. Но это не то, с чем мы можем помочь.
Member 14575056
Ладно, спасибо за помощь.
Member 14575056
Похоже, что есть какая-то ошибка с FormUrlEncodedContent, где он неправильно кодирует KeyValuePairs, что приводит к тому, что ответ также становится нулевым. Я слышал, что его можно заменить на StringContent, но я не смог заставить его работать.
Richard MacCutchan
Вы проверили документацию для этого метода и использовали отладчик, чтобы увидеть, что он на самом деле создает?