首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net核心2.2,PutAsync,HttpContent问题

.Net核心2.2,PutAsync,HttpContent问题
EN

Stack Overflow用户
提问于 2019-05-28 08:52:46
回答 2查看 366关注 0票数 0

我正在从node with express过渡到.Net Core2.2。我正在尝试创建一个put请求,以将更新推送到api。我想我可以用以下命令来创建它

var client = new HttpClient(); client.PutAsync(url, httpContent)

我的第一个问题是,如何创建httpContent?通常在这种情况下,我会创建一个JSON对象,但当然这在这里不起作用。

我的第二个问题是,我正在使用.Net Core2.2。使用HttpClient是正确的方式,还是应该使用工厂?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-28 09:25:17

请参考下面的代码片段进行post请求,可以同时实现Put请求,只需将方法改为put即可。

代码语言:javascript
复制
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对象时,底层套接字也不会立即释放,并可能导致名为‘套接字耗尽’的严重问题。”

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 22:36:08

您可以使用以下代码片段来发出Put请求。

代码语言:javascript
复制
 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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56333840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档