Итак, я думаю, что вы пытаетесь сделать сообщение с URL-адресом в форме для конечной точки «токена» с предоставлением имени пользователя и пароля. Обычно это делается так:
using (var request = new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com/token"))
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "grant_type", "password" },
{ "username", "username@site.com" },
{ "password", "password12345" }
})
})
{
using (var resp = await _client.SendAsync(request))
{
resp.EnsureSuccessStatusCode();
//await resp.Content.ReadAsAsync<BearerToken>();
// for testing purposes, try this:
var returnData = await resp.Content.ReadAsStringAsync();
Console.WriteLine(returnData);
}
}
Вы должны определить это вне всех областей, в которых вам нужно выполнять запросы Http:
private static readonly HttpClient _client = new HttpClient();
Итак, во-первых, попробуйте придерживаться HttpClient
. Другие шаблоны, такие как WebClient
, считаются устаревшими.
Затем заголовки CORS обычно возвращаются с сервера, когда на сервер отправляется вызов OPTIONS. Вы не делаете этого здесь, и вам никогда не придется беспокоиться о подобных вещах внутри программы C#, запущенной с вашего компьютера. Таким образом, вы можете отбросить заголовок контроля доступа.
Данные с URL-адресом формы не являются данными JSON. Это другой способ форматирования данных. Если вы хотите отправить данные JSON, вы должны использовать тип содержимого application/json
Наконец, вы пытаетесь добавить заголовок Authorization
. Но в этом нет особого смысла, поскольку вы пытаетесь аутентифицировать себя, чтобы стать авторизованным. Если вы отправите правильное имя пользователя / пароль, вы получите токен-носитель, который вы можете использовать в заголовке Authorization
для будущих запросов к указанной службе.
О, и я забыл добавить: всякий раз, когда вы видите ошибку в диапазоне [400,499] (в данном случае «400 - неверный запрос») это означает, что вы отправили что-то не так, и сервер не понимает, что вы пытаетесь сделать. Например: 401 означает, что вы отправили недействительную или отсутствующую информацию авторизации. 400 означает, что ваши данные, вероятно, были искажены.
Но мне нравится ваш вопрос ... Я вижу, что вы делали, и вы пробовали разные вещи.
Загрузите программу под названием Fiddler
, если вы хотите увидеть, как работает HTTP. Это отличный инструмент для отладки ваших HTTP-вызовов.