我正在从node with express过渡到.Net Core2.2。我正在尝试创建一个put请求,以将更新推送到api。我想我可以用以下命令来创建它
var client = new HttpClient(); client.PutAsync(url, httpContent)
我的第一个问题是,如何创建httpContent?通常在这种情况下,我会创建一个JSON对象,但当然这在这里不起作用。
我的第二个问题是,我正在使用.Net Core2.2。使用HttpClient是正确的方式,还是应该使用工厂?
发布于 2019-05-28 09:25:17
请参考下面的代码片段进行post请求,可以同时实现Put请求,只需将方法改为put即可。
protected async Task<Tuple<HttpStatusCode, TOutput>> MakeRequest<TInput, TOutput>(string baseAdrress, string apiUrl, TInput data)
{
var contentData = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri(baseAdrress);
var response = await client.SendAsync(new HttpRequestMessage
{
RequestUri = new Uri(apiUrl, UriKind.Relative),
Content = contentData,
Method = HttpMethod.Post
});
if (response.StatusCode == HttpStatusCode.InternalServerError)
{
return Tuple.Create(HttpStatusCode.InternalServerError, default(TOutput));
}
var stringData = await response.Content.ReadAsStringAsync();
var jsonData = JsonConvert.DeserializeObject<TOutput>(stringData);
return Tuple.Create(HttpStatusCode.OK, jsonData);
}上面的代码只是使用http客户端的一个快速演示,在现实世界中,你应该使用HttpClientFactory。您可以通过多种方式使用read here at Microsoft Docs来使用HttpClientFactory
直接使用HttpClient可能会导致M$提到的一些问题,“虽然这个类是可处置的,但将它与Using语句一起使用并不是最佳选择,因为即使在处置HttpClient对象时,底层套接字也不会立即释放,并可能导致名为‘套接字耗尽’的严重问题。”
发布于 2020-05-08 22:36:08
您可以使用以下代码片段来发出Put请求。
protected async Task<Tuple<Boolean, TOutput>> PutResult<TInput, TOutput>(String url, TOutput fallbackValue, TInput input)
{
HttpRequestMessage requestMessage = GetPutHttpRequestMessageWithSerializedContent(url, input);
Tuple<Boolean, TOutput> result = await SendAsync(requestMessage, fallbackValue);
return result;
}
private HttpRequestMessage GetPutHttpRequestMessageWithSerializedContent<TInput>(String url, TInput input)
{
String rawContent = JsonConvert.SerializeObject(input, JsonSerializerOptions);
StringContent content = new StringContent(rawContent, Encoding.UTF8, "application/json");
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Put, url)
{
Content = content
};
return requestMessage;
}https://stackoverflow.com/questions/56333840
复制相似问题