zacky
zacky

Reputation: 89

Adding httpclient DefaultRequestHeader and RequestMessage header

Should I still add my headers to HttpRequestMessageif I already have add on my httpclient headers? what is the difference of adding from httpclient first and then requestMessage?

like this:

 public static async Task<JsonDocument> ParseJsonData(string api, string method, CancellationToken cancellationToken)
    {
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        client.DefaultRequestHeaders.Add("Accept", "text/html,application/xml,application/json");
        client.DefaultRequestHeaders.Add("Accept-Language", "en-us,en;q=0.5");
        client.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgent);

        var uri = new Uri(api, UriKind.Absolute);

        var Method = new HttpMethod(method);

        using (var request = new HttpRequestMessage(Method, uri))
        {
            cancellationToken.ThrowIfCancellationRequested();

            request.RequestUri = uri;
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            request.Headers.Pragma.ParseAdd("no-cache");
            request.Headers.Add("Cache-Control", "no-cache");
            request.Headers.Connection.ParseAdd("keep-alive");
            request.Headers.UserAgent.ParseAdd(UserAgent);
        
         switch (Method.ToString().ToUpper())
            {
                case "POST":

                    string loginInfo = "{\"login_id\": \"" + credential.username + 
                                    "\", \"password\": \"" + credential.password + "\"}";
                    using (var content = new StringContent(loginInfo, Encoding.UTF8, "text/plain"))
                    {
                        request.Content = content;
                        return await ResponseMessage(request, cancellationToken);
                    }

                case "GET":
                    {
                        return await ResponseMessage(request, cancellationToken);
                    }
            }

Upvotes: 1

Views: 3468

Answers (1)

Cory Nelson
Cory Nelson

Reputation: 30031

Both collections are merged when sending a request. If there's a duplicate header, both will be sent out.

Upvotes: 2

Related Questions