【问题标题】:C# Authorization has been denied for this request此请求的 C# 授权已被拒绝
【发布时间】:2017-10-12 20:05:45
【问题描述】:

我正在尝试使用令牌持有者身份验证从我的 .net Consoleapp 连接到远程 WebApi

尽管我的程序成功返回了一个令牌,但在我的PostAsync 方法中,我收到以下消息:

“此请求的授权已被拒绝”

我的代码如下

hHttpClient client = new HttpClient();
client.BaseAddress = new Uri(URL);
HttpContent Content = new StringContent(string.Format("grant_type=password&username={0}&password={1}",
    HttpUtility.UrlEncode(ApiLoginUsername),
    HttpUtility.UrlEncode(ApiLoginPassword)), Encoding.UTF8,
    "application/x-www-form-urlencoded");
HttpResponseMessage response = client.PostAsync("/api/login", Content).Result;
string resultJSON = response.Content.ReadAsStringAsync().Result;
result = JsonConvert.DeserializeObject<LoginTokenResult>(resultJSON);

到目前为止,代码返回一个 Token 并将其存储在结果中

以下部分执行以下操作:使用我收到的令牌,我正在尝试检索一些数据

HttpContent TestContent = new StringContent(string.Format("Authorization","Bearer"+ result.AccessToken,"application/json"));
var Product = client.PostAsync("/api/Report",TestContent).Result;----> This is where it says Authorization denied
var test = Product.Content.ReadAsStringAsync().Result;
return result;

为什么我在test 中收到消息“此请求的授权已被拒绝” 我在我的代码中遗漏了一些重要的东西吗?任何帮助将不胜感激

【问题讨论】:

  • 可能有很多原因,但我猜这是因为"Bearer"result.AccessToken 之间没有空格。
  • @Kirk 感谢您的快速回复,但这不是您的建议
  • 授权/承载是一个请求头。
  • 将该行添加到请求标头。试试 TestContent.Headers.Add("Authorization", string.Format("bearer {0}", ));您可能只需要使用msdn.microsoft.com/en-us/library/hh138176(v=vs.118).aspx 来发送您的请求。并将 Authorization 标头直接添加到您的请求中。
  • 您尝试过使用 HttpClient.SendAsync 吗?构建您的 HttpRequestMessage,然后像我上面所说的那样添加标题。然后调用 httpClient.SendAsync()。我就是这么做的。

标签: c# httpclient httpcontext


【解决方案1】:

您的请求可能如下所示:

string uri = "/api/Report";
string token = "<token here>";
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("<base address>");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Headers.Add("Authorization", string.Format("bearer {0}", token);

HttpResponseMessage response = client.SendAsync(request).Result;

在您的代码中,您尝试将授权简介作为字符串内容发布在请求标头中的位置。

【讨论】:

  • 可能你是对的,因为现在我得到响应“内部服务器错误”
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2018-10-05
  • 2016-12-06
相关资源
最近更新 更多