代码之家  ›  专栏  ›  技术社区  ›  testing

HttpClient。GetStreamAsync()是否具有自定义请求?

  •  4
  • testing  · 技术社区  · 7 年前

    我的目标是使用 HttpClient 类来发出web请求,以便我可以将响应写入文件(解析后)。因此,我需要结果作为 Stream

    HttpClient.GetStreamAsync() 只接受字符串 requestUri 作为参数。因此,不可能使用自定义创建请求 HttpRequestHeader 风俗 HttpMethod 内容类型

    我看到了 HttpWebRequest 有时是 used instead ,但在我的PCL(Profile111)中没有 Add 方法 Headers . 我能用吗 HttpClient ,我应该使用吗 或者我应该使用另一个类/库?

    2 回复  |  直到 7 年前
        1
  •  10
  •   W1M0R    4 年前

    GetStreamAsync 只是构建和发送无内容GET请求的快捷方式。“漫长的道路”相当简单:

    var request = new HttpRequestMessage(HttpMethod.???, uri);
    // add Content, Headers, etc to request
    request.Content = new StringContent(yourJsonString, System.Text.Encoding.UTF8, "application/json");
    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    response.EnsureSuccessStatusCode();
    var stream = await response.Content.ReadAsStreamAsync();
    
        2
  •  0
  •   Todd Menier    6 年前

    既然你提到了开放使用不同的库,这里有一个替代方法 Flurl (免责声明:我是作者)。假设您想发布一些带有几个自定义头的JSON数据并接收流:

    var stream = await "https://api.com"
        .WithHeaders(new { header1 = "value1", header2 = "value2" })
        .PostJsonAsync(data)
        .ReceiveStream();
    

    在这里 data 只是一个POCO。不要担心将其序列化为JSON字符串或将内容类型设置为 application/json ; Flurl会为你做这两件事。

    Flurl使用 HttpClient 引擎盖下和目标。净标准1.1,即 fully compatible 使用PCL Profile111。