Создать HttpRequestHeaders из JObject - PullRequest
       27

Создать HttpRequestHeaders из JObject

0 голосов
/ 05 января 2019

Я создал API для своего настольного программного обеспечения, чтобы избежать кодирования и перестроения каждый раз, когда я хочу вносить изменения в заголовки HttpClient, но я не знаю, как создать собственный список HttpRequestHeader и добавить его в HttpClient как Заголовки запроса.

Я ищу решение, подобное этому:

clients.DefaultRequestHeaders = list_of_json_header_values;

Вот как выглядит мой код для выполнения запроса:

public static string DownloadSource(string link)
{
    try
    {
        HttpClientHandler hch = new HttpClientHandler();
        hch.Proxy = null;
        hch.UseProxy = false;

        using (HttpClient clients = new HttpClient(hch))
        {
            //clients.DefaultRequestHeaders = list_of_json_header_values; ???

            using (HttpResponseMessage response = clients.GetAsync(link).Result)
            {
                using (HttpContent content = response.Content)
                {
                    return content.ReadAsStringAsync().Result;
                }
            }
        }
    }
    catch (Exception _ex)
    {
        MessageBox.Show(_ex.ToString());
    }
}

Вот как я получаю заголовки из JSON:

var headers_json = "json here";
var objects = JObject.Parse(headers_json);

foreach (var item in objects["header_settings"])
{
    //list_of_json_header_values.Add(item.ToString()); ???
    Console.WriteLine(item.ToString());
}

Вывод на консоль:

"Cache-Control": "no-cache"
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
"Accept-Language": "en-GB,en;q=0.5"

1 Ответ

0 голосов
/ 05 января 2019

Вы можете создать такой метод расширения:

public static class HttpClientExtensions
{
    public static void AddHeadersFromJson(this HttpClient client, string json)
    {
        JObject obj = JObject.Parse(json);

        foreach (JProperty prop in obj["header_settings"].Children<JProperty>())
        {
            client.DefaultRequestHeaders.Add(prop.Name, (string)prop.Value);
        }
    }
}

Тогда вы можете сделать:

using (HttpClient client = new HttpClient(hch))
{
    client.AddHeadersFromJson(headers_json);

    ...
}
...