向标头添加授权

我有以下代码:

... AuthenticationHeaderValue authHeaders = new AuthenticationHeaderValue("OAuth2", Contract.AccessToken); string result = await PostRequest.AuthenticatedGetData(fullUrl, null, authHeaders); return result; ... public static async Task 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; } 

响应=等待部分只是继续循环,没有任何反应。 我有什么想法我做错了吗?

问题是,我如何发送以下标题:

 Authorization: OAuth2 ACCESS_TOKEN 

到外部网络api

这条线

 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authValue.Parameter); 

将产生此标头值

 Authorization: ACCESS_TOKEN 

其中ACCESS_TOKENACCESS_TOKEN的值。 您想要分配您传递的值以获取所需的标头

 client.DefaultRequestHeaders.Authorization = authValue; 

会生产

 Authorization: OAuth2 ACCESS_TOKEN 

我为此苦苦挣扎。 我一直收到错误,说“格式无效”,因为我有一个自定义实现,并且Authorization标头针对某些标准进行了validation。 然而,以这种方式添加标题有效:

 var http = new HttpClient(); http.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=XXX"); 

获取AuthenticationHeaderValue以处理我的请求时遇到类似问题。 我也在使用GitHub的JWT JsonWebToken。 我能够从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);