HttpClient.GetStreamAsync() 有自定义请求?
HttpClient.GetStreamAsync() with custom request?
我的目标是使用 HttpClient
class 发出网络请求,以便我可以将响应写入文件(解析后)。因此我需要结果作为 Stream
.
HttpClient.GetStreamAsync() 只接受字符串 requestUri
作为参数。所以不可能创建带有自定义 HttpRequestHeader
、自定义 HttpMethod
、自定义 ContentType、自定义内容等的请求?
我看到 HttpWebRequest
有时是 , but in my PCL (Profile111) there is no Add
method for the Headers
。那么我可以使用 HttpClient
,我应该使用 HttpWebRequest
还是应该使用另一个 class/library?
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();
由于您提到可以使用不同的库,这里有一个使用 Flurl 的替代方法(免责声明:我是作者)。假设您想 POST 一些 JSON 数据与一对自定义 headers 并接收流:
var stream = await "https://api.com"
.WithHeaders(new { header1 = "value1", header2 = "value2" })
.PostJsonAsync(data)
.ReceiveStream();
这里data
只是一个POCO。不要担心将其序列化为 JSON 字符串或将 Content-Type 设置为 application/json
; Flurl 会为您做到这两点。
Flurl 在后台使用 HttpClient
并以 .NET Standard 1.1 为目标,即 fully compatible 和 PCL Profile111。
我的目标是使用 HttpClient
class 发出网络请求,以便我可以将响应写入文件(解析后)。因此我需要结果作为 Stream
.
HttpClient.GetStreamAsync() 只接受字符串 requestUri
作为参数。所以不可能创建带有自定义 HttpRequestHeader
、自定义 HttpMethod
、自定义 ContentType、自定义内容等的请求?
我看到 HttpWebRequest
有时是 Add
method for the Headers
。那么我可以使用 HttpClient
,我应该使用 HttpWebRequest
还是应该使用另一个 class/library?
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();
由于您提到可以使用不同的库,这里有一个使用 Flurl 的替代方法(免责声明:我是作者)。假设您想 POST 一些 JSON 数据与一对自定义 headers 并接收流:
var stream = await "https://api.com"
.WithHeaders(new { header1 = "value1", header2 = "value2" })
.PostJsonAsync(data)
.ReceiveStream();
这里data
只是一个POCO。不要担心将其序列化为 JSON 字符串或将 Content-Type 设置为 application/json
; Flurl 会为您做到这两点。
Flurl 在后台使用 HttpClient
并以 .NET Standard 1.1 为目标,即 fully compatible 和 PCL Profile111。