.NET Framework 4.5中的System.Net.Http.HttpClient和System.Net.Http.HttpClientHandler实现了IDisposable(通过System.Net.Http.HttpMessageInvoker).
该using声明文件说:
通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它.
这个答案使用了这种模式:
var baseAddress = new Uri("http://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("foo", "bar"),
new KeyValuePair<string, string>("baz", "bazinga"),
});
cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
var result = client.PostAsync("/test", content).Result;
result.EnsureSuccessStatusCode();
}
Run Code Online (Sandbox Code Playgroud)
但是微软最明显的例子并没有Dispose()明确地或隐含地调用.例如:
如何为HttpClient请求添加自定义标头?我正在使用PostAsJsonAsync方法发布JSON.我需要添加的自定义标题是
"X-Version: 1"
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的:
using (var client = new HttpClient()) {
client.BaseAddress = new Uri("https://api.clickatell.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("rest/message", svm).Result;
}
Run Code Online (Sandbox Code Playgroud) 是否可以使用HttpClient.NET 4.5中的新创建HTTP HEAD请求?唯一的方法我能看到的是GetAsync,DeleteAsync,PutAsync和PostAsync.我知道HttpWebRequest-class能够做到这一点,但我想使用现代HttpClient.
我必须使用HttpClient类向具有JSON内容的REST API服务发送删除命令,并且无法使其正常工作.
API调用:
DELETE /xxx/current
{
"authentication_token": ""
}
Run Code Online (Sandbox Code Playgroud)
因为我无法在下面的语句中添加任何内容:
HttpResponseMessage response = client.DeleteAsync(requestUri).Result;
Run Code Online (Sandbox Code Playgroud)
我知道如何使用RestSharp来完成这项工作:
var request = new RestRequest {
Resource = "/xxx/current",
Method = Method.DELETE,
RequestFormat = DataFormat.Json
};
var jsonPayload = JsonConvert.SerializeObject(cancelDto, Formatting.Indented);
request.Parameters.Clear();
request.AddHeader("Content-type", "application/json");
request.AddHeader ("Accept", "application/json");
request.AddParameter ("application/json", jsonPayload, ParameterType.RequestBody);
var response = await client.ExecuteTaskAsync (request);
Run Code Online (Sandbox Code Playgroud)
但我没有RestSharp就完成了.
我试图找出如何使用HttpClient到POST一些简单的参数.
我一直在用RestSharp做这个,但我正试图迁移它.
我怎么能这样做HttpClient呢?
我有以下RestSharp代码
var restRequest = new RestRequest("account/authenticate", Method.POST);
restRequest.AddParameter("Email", email);
restRequest.AddParameter("Password", password);
Run Code Online (Sandbox Code Playgroud)
我怎样才能将其转换为使用(Microsoft.Net.Http) HttpClient该类?
请注意:我正在进行POST
此外,这是PCL组件.
最后,我可以添加自定义标头.说:"ILikeTurtles", "true".
c# ×5
.net ×2
.net-4.5 ×2
asp.net ×1
http-headers ×1
httpclient ×1
httprequest ×1
idisposable ×1
restsharp ×1
using ×1