Подтвердить что ты не робот

Добавление авторизации в заголовки

У меня есть следующий код:

...
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

4b9b3361

Ответ 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);