Добавление авторизации в заголовки
У меня есть следующий код:
...
AuthenticationHeaderValue authHeaders = new AuthenticationHeaderValue("OAuth2", Contract.AccessToken);
string result = await PostRequest.AuthenticatedGetData(fullUrl, null, authHeaders);
return result;
...
public static async Task<string> AuthenticatedGetData(string url, FormUrlEncodedContent data, AuthenticationHeaderValue authValue)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authValue.Parameter);
HttpResponseMessage response = await client.PostAsync(new Uri(url), data);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
Компонент response = waiting просто продолжает непрерывный цикл, и ничего не происходит. Любые идеи, что я делаю неправильно?
Вопрос в том, как отправить следующий заголовок:
Authorization: OAuth2 ACCESS_TOKEN
к внешнему веб-сайту api
Ответы
Ответ 1
Эта строка
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(authValue.Parameter);
Произведет это значение заголовка
Authorization: ACCESS_TOKEN
Где ACCESS_TOKEN
- значение authValue.Parameter
. Вы хотите присвоить значение, которое вы передали, чтобы получить требуемый заголовок
client.DefaultRequestHeaders.Authorization = authValue;
Произведет
Authorization: OAuth2 ACCESS_TOKEN
Ответ 2
Я боролся с этим. Я продолжал получать сообщение об ошибке "неверный формат", потому что у меня есть пользовательская реализация, а заголовок авторизации проверяется на соответствие определенным стандартам. Однако добавление заголовка таким образом работало:
var http = new HttpClient();
http.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=XXX");
Ответ 3
Имел аналогичную проблему, когда вы пытались заставить AuthenticationHeaderValue работать с моими запросами.
Я также использовал JWT JsonWebToken от GitHub.
Я смог получить токен из API, но пытался использовать его в других GET и POST.
var jwt = JsonWebToken.Encode(token, APISECRET, JwtHashAlgorithm.HS256);
var tk = GetTokenFromApi(); // basically returns an encrypted string.
Вручную использовать WebRequest:
Что хорошо работает.
request.ContentType = "application/json";
request.Method = "POST";
request.Headers.Set("Authorization", string.Format("Bearer {0}", tk));
Когда мы переключились на HttpClient и использовали AuthenticationHeaderValue, не могли понять, как правильно его настроить. После просмотра строки запроса я увидел, что для меня добавлена "Авторизация". Играли с параметрами, и это, в конечном итоге, сработало.
var authenticationHeaderValue = new AuthenticationHeaderValue("Bearer", tk);