ASP.NET MVC 4 HttpClient() 问题

Posted

技术标签:

【中文标题】ASP.NET MVC 4 HttpClient() 问题【英文标题】:ASP.NET MVC 4 HttpClient() issue 【发布时间】:2013-06-09 12:24:04 【问题描述】:

我目前正在开发一个使用 PayPal 处理信用卡交易的 ASP.Net MVC 4 应用程序。我已经使用 PayPal RESTFul API 完成了大部分设置,出于某种原因,PayPal 的最新版本的 SDK 只是不想工作(通过 NUGET),所以我决定使用 ASP.Net 的最新和最强大的 API 自己调用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

现在我确定我传递了正确的凭据,但我认为其格式不正确使这项工作。我应该使用什么?

在这方面的任何帮助将不胜感激。

【问题讨论】:

你试过这种方法吗:***.com/a/10882556/1563373 【参考方案1】:

您似乎错误地设置了标题值。试试下面的方法看看是否有效:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(accessToken.access_token));

【讨论】:

感谢您的帮助,但我得到了同样的错误,我仔细检查了所有 access_Token 并且它是正确的,但我得到了相同的status code 401 unauthorized 好的,您是否也检查过令牌转换后的值是否与您在curl 示例中使用的值相同。 不,我没有,我上面提供的示例是 PayPal 提供的。访问令牌只能使用 8 小时。我在想的是,您的解决方案转换为curl .... -u [access token] 而不是curl... -H [authorization....],基于我使用它来获取access token

以上是关于ASP.NET MVC 4 HttpClient() 问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4 异步子动作

ASP.NET MVC 中的 HttpClient 单例实现

如何在使用 HttpClient 使用 Asp Net Web Api 的 Asp Net Mvc 中提供实时数据?

无法使用 HttpClient 对 ASP.NET Web Api 服务进行身份验证

在 asp.net MVC 中设置整数标头值

从 ASP.net 4 Web API 2 项目通过 HttpClient 调用 REST 服务导致异常