【问题标题】:Create HttpRequestHeaders from JObject从 JObject 创建 HttpRequestHeaders
【发布时间】:2019-01-05 19:12:39
【问题描述】:

我为我的桌面软件创建了一个 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"

【问题讨论】:

    标签: c# json header json.net httpclient


    【解决方案1】:

    你可以做一个这样的扩展方法:

    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);
    
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多