调用HTTPClient.PostAsync时设置标头

在使用简单的HTTPClient时,我可以在哪里设置标头到REST服务调用?

我做 :

HttpClient client = new HttpClient(); var values = new Dictionary { {"id", "111"}, {"amount", "22"} }; var content = new FormUrlEncodedContent(values); var uri = new Uri(@"https://some.ns.restlet.uri"); var response = await client.PostAsync(uri, content); var responseString = await response.Content.ReadAsStringAsync(); 

UPD

我不会添加的标题是:

 {"Authorization":"NLAuth nlauth_account=5731597_SB1, nlauth_email=xxx@xx.com, nlauth_signature=Pswd1234567, nlauth_role=3","Content-Type":"application/json"} 

我应该遵循:

 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "NLAuth nlauth_account=5731597_SB1, nlauth_email=xxx@xx.com, nlauth_signature=Pswd1234567, nlauth_role=3","Content-Type":"application/json"); 

添加标头的方法如下:

 HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token"); 

或者如果你想要一些自定义标题:

 HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("HEADERNAME", "HEADERVALUE"); 

这个答案已有SO回复,见下文:

  • 使用httpClient.GetAsync时添加标头
  • 设置HttpClient的授权标头

UPDATE

好像你要添加两个标题; 授权和内容类型。

 string authValue = "NLAuth nlauth_account=5731597_SB1,nlauth_email=xxx@xx.com, nlauth_signature=Pswd1234567, nlauth_role=3"; string contentTypeValue = "application/json"; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authValue); client.DefaultRequestHeaders.Add("Content-Type", contentTypeValue); 

我知道这是前一段时间被问过的,但Juan的解决方案对我不起作用。

(另外,非常肯定这个问题在这里重复。)

最终工作的方法是使用HttpClient和HttpRequestMessage以及HttpResponseMessage 。

另请注意,这是使用Newtonsoft的Json.NET 。

  using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Net.Http.Headers; using Newtonsoft.Json; namespace NetsuiteConnector { class Netsuite { public void RunHttpTest() { Task t = new Task(TryConnect); t.Start(); Console.WriteLine("Connecting to NS..."); Console.ReadLine(); } private static async void TryConnect() { // dummy payload String jsonString = JsonConvert.SerializeObject( new NewObj() { Name = "aname", Email = "someone@somewhere.com" } ); string auth = "NLAuth nlauth_account=123456,nlauth_email=youremail@somewhere.com,nlauth_signature=yourpassword,nlauth_role=3"; string url = "https://somerestleturl"; var uri = new Uri(@url); HttpClient c = new HttpClient(); c.BaseAddress = uri; c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", auth); c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, url); req.Content = new StringContent(jsonString, Encoding.UTF8, "application/json"); HttpResponseMessage httpResponseMessage = await c.SendAsync(req); httpResponseMessage.EnsureSuccessStatusCode(); HttpContent httpContent = httpResponseMessage.Content; string responseString = await httpContent.ReadAsStringAsync(); Console.WriteLine(responseString); } } class NewObj { public string Name { get; set; } public string Email { get; set; } } }