【发布时间】: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