Проблема ASP.NET MVC 4 HttpClient()

В настоящее время я работаю над приложением ASP.Net MVC 4, которое использует PayPal для обработки транзакций по кредитным картам. Я настроил большую часть всего с помощью PayPal RESTFul API, и по какой-то причине последняя версия SDK PayPal просто не хочет работать (через NUGET), поэтому я решил сделать API-вызовы сам, используя последнюю и лучшую версию ASP.Net. HttpClient() (в любом случае так больше нравится)

Мне нужно сделать следующее (скопировано из документации PayPal)

 curl -v https://api.sandbox.paypal.com/v1/payments/payment \
 -H "Content-Type:application/json" \
 -H "Authorization:Bearer EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG" \
 -d   '{
        "intent": "sale",
        "rest_of_the_data": "I didn't include it here"
      }'

На чем я сейчас застрял, так это на третьем параметре -H "Authorization:Bearer EEwJ6tF9x5WCIZDYzyZGaz6Khbw7raYRIBV_WxVvgmsG" \ вот что у меня не работает:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(                                    System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1} {2}", "Authorization", accessToken.token_type, accessToken.access_token))));
    var response = client.PostAsync<Payment>(endPoint + "/v1/payments/payment", payment, new JsonMediaTypeFormatter());
    if (response.Result.IsSuccessStatusCode)
       {
          var responseContent = response.Result.Content;
          var responseString = responseContent.ReadAsAsync<Payment>().Result;
       }
}

С приведенным выше кодом я получаю следующий ответ:

Result = {StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Date: Thu, 13 Jun 2013 07:06:50 GMT
  Server: Apache-Coyote/1.1
  Content-Length: 0
  Content-Type: application/json
}}

Теперь я уверен, что передаю правильные учетные данные, но я считаю, что они неправильно отформатированы в соответствии с -H "Authorization:Bearer.... Я считаю, что мне не следует использовать client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(..., но я не могу найти замену для этой работы. Что я должен использовать?

Любая помощь в этом отношении будет принята с благодарностью.


person hjavaher    schedule 13.06.2013    source источник
comment
Вы пробовали этот подход: stackoverflow.com/a/10882556/1563373   -  person Slicksim    schedule 13.06.2013


Ответы (1)


Похоже, вы неправильно устанавливаете значение заголовка. Попробуйте следующее, чтобы увидеть, работает ли это:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(accessToken.access_token));
person Kiran Challa    schedule 13.06.2013
comment
Спасибо за помощь, но я получил ту же ошибку, я дважды проверил все access_Token, и это правильно, но я получаю то же самое status code 401 unauthorized - person hjavaher; 13.06.2013
comment
Хорошо, вы также проверили, совпадает ли значение после преобразования токена с тем, которое вы использовали в curl примере, который вы привели. - person Kiran Challa; 13.06.2013
comment
Нет, пример, который я привел выше, был предоставлен PayPal. токен доступа действителен только в течение 8 часов. Я думаю, что ваше решение преобразуется в curl .... -u [access token] вместо curl... -H [authorization....], основываясь на моем использовании его для получения access token - person hjavaher; 13.06.2013