如何使用HttpClient发布身份validation
我正在尝试使用HttpClient在C#中执行以下curl(适用于我)。
curl -X POST http://www.somehosturl.com \ -u : \ -d 'grant_type=password' \ -d 'username=' \ -d 'password=' \ -d 'scope=all
C#代码:
HttpClientHandler handler = new HttpClientHandler { Credentials = new System.Net.NetworkCredential ("my_client_id", "my_client_secret") }; try { using(var httpClient = new HttpClient(handler)) { var activationUrl = "www.somehosturl.com"; var postData = "grant_type=password&username=myemail@myemail.com&password=mypass&scope=all"; var content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded"); var response = await httpClient.PostAsync(activationUrl, content); if(!response.IsSuccessStatusCode) return null; var result = await response.Content.ReadAsStringAsync(); return result; } } catch(Exception) { return null; }
执行时,只是崩溃,甚至没有捕获exception
通常情况下,我能够完全获得GET和POST,但最让我失望的是如何设置auth的东西(client-id和client-secret)
首先,您必须使用
和
设置Authorization
-Header。
您应该使用FormUrlEncodedContent
而不是使用StringContent
,如下所示:
var client = new HttpClient(); client.BaseAddress = new Uri("http://myserver"); var request = new HttpRequestMessage(HttpMethod.Post, "/path"); var byteArray = new UTF8Encoding().GetBytes(":"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); var formData = new List>(); formData.Add(new KeyValuePair("grant_type", "password")); formData.Add(new KeyValuePair("username", "")); formData.Add(new KeyValuePair("password", "")); formData.Add(new KeyValuePair("scope", "all")); request.Content = new FormUrlEncodedContent(formData); var response = await client.SendAsync(request);
尝试将您的凭据直接放入HttpClient的headers属性中。
using (var client = new HttpClient()) { var byteArray = Encoding.ASCII.GetBytes("my_client_id:my_client_secret"); var header = new AuthenticationHeaderValue("Basic",Convert.ToBase64String(byteArray)); client.DefaultRequestHeaders.Authorization = header; return await client.GetStringAsync(uri); }
- WebServiceexception – 基础连接已关闭:发送时发生意外错误
- COM方法,Char类型和CharSet
- TeamCity中的MSBuild步骤考虑了app.config而不是ASP.NET WEB API项目的web.config,导致警告MSB3247
- .Net C#到PHP Pb with byte array&ComputeHash
- WPF View在关闭时将ViewModel属性设置为null
- 什么是HORN的真实世界应用程序?
- 在不复制源列表的情况下有效地对IList 进行排序
- 我可以从后台线程更新UI,为什么?
- WPF从子ItemsControl数据模板内部绑定到父ItemsControl