Set Authorization/Content-Type headers when call HTTPClient.PostAsync

前端 未结 3 731
忘了有多久
忘了有多久 2020-12-30 05:31

Where can I set headers to REST service call when using simple HTTPClient?

I do :

HttpClient client = new HttpClient();
var values = new Dictionary&         


        
相关标签:
3条回答
  • 2020-12-30 06:04

    I know this was asked a while ago, but Juan's solution didn't work for me.

    (Also, pretty sure this question is duplicated here.)

    The method that finally worked was to use HttpClient with HttpRequestMessage and HttpResponseMessage.

    Also note that this is using Json.NET from Newtonsoft.

        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; }
            }
        }
    
    0 讨论(0)
  • 2020-12-30 06:13

    The other answers do not work if you are using an HttpClientFactory, and here's some reasons why you should. With an HttpClientFactory the HttpMessages are reused from a pool, so setting default headers should be reserved for headers that will be used in every request.

    If you just want to add a content-type header you can use the alternate PostAsJsonAsync or PostAsXmlAsync.

    var response = await _httpClient.PostAsJsonAsync("account/update", model);
    

    Unfortunately I don't have a better solution for adding authorization headers than this.

    _httpClient.DefaultRequestHeaders.Add(HttpRequestHeader.Authorization.ToString(), $"Bearer {bearer}");
    
    0 讨论(0)
  • 2020-12-30 06:19

    The way to add headers is as follows:

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

    Or if you want some custom header:

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

    This answer has SO responses already, see below:

    • Adding headers when using httpClient.GetAsync
    • Setting Authorization Header of HttpClient

    UPDATE

    Seems you are adding two headerrs; authorization and content type.

    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);
    
    0 讨论(0)
提交回复
热议问题