Sab*_*eti 25 c# parameters post httpclient
我使用下面的代码向服务器发送POST请求:
string url = "http://myserver/method?param1=1¶m2=2"
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(handler);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
HttpResponseMessage response = await httpClient.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)
我没有访问服务器进行调试,但我想知道,这个请求是以POST还是GET发送的?
如果是GET,如何更改我的代码以将param1和param2作为POST数据发送(不在URL中)?
alo*_*ica 50
更清洁的替代方案是使用a Dictionary来处理参数.毕竟它们是键值对.
private static readonly HttpClient httpclient;
static MyClassName()
{
// HttpClient is intended to be instantiated once and re-used throughout the life of an application.
// Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads.
// This will result in SocketException errors.
// https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.7.1
httpclient = new HttpClient();
}
var url = "http://myserver/method";
var parameters = new Dictionary<string, string> { { "param1", "1" }, { "param2", "2" } };
var encodedContent = new FormUrlEncodedContent (parameters);
var response = await httpclient.PostAsync (url, encodedContent).ConfigureAwait (false);
if (response.StatusCode == HttpStatusCode.OK) {
// Do something with response. Example get content:
// var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
}
Run Code Online (Sandbox Code Playgroud)
Dispose()如果你不使用关键字,也不要忘记HttpClientusing
正如Microsoft文档中 HttpClient类的备注部分所述,HttpClient应该被实例化一次并重新使用.
编辑:
你可能想要研究response.EnsureSuccessStatusCode();而不是if (response.StatusCode == HttpStatusCode.OK).
你可能想保留你的HttpClient而不是Dispose()它.请参阅:HttpClient和HttpClientHandler是否必须处理?
| 归档时间: |
|
| 查看次数: |
77284 次 |
| 最近记录: |