[英]How to replace obsolete WebClient POST+ZIP with HttpClient in .NET 6
[英]how to convert WebClient Post method to HttpClient in .net 6.0
我正在將解決方案從 .net 核心升級到 .net 6.0,我想將 WebClient 發布方法轉換為 HttpClient.Here is WebClient Post Code
請求包含用戶名和密碼
request= new
{
OsUsername = "abc",
OsPassword = "password"
}
private JObject Post(string path, object request)
{
string rawRequest = null;
string rawResponse = null;
try
{
using var client = new WebClient();
rawRequest = JsonConvert.SerializeObject(request, (Newtonsoft.Json.Formatting) Formatting.Indented);
rawResponse = client.UploadString(BaseUrl + path, "POST", rawRequest);
var response = JObject.Parse(rawResponse);
if (!path.StartsWith("resource"))
{
ValidateResponse(response);
}
return response;
}
catch (Exception)
{
Logger.Information(rawRequest);
Logger.Error(rawResponse);
throw;
}
}
我正在編寫以下代碼並使用 HttpClient Post 方法
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("BaseUrl");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("Username", "abc"),
new KeyValuePair<string, string>("Password", "password")
});
var result = await client.PostAsync(BaseUrl + url, content);
string resultContent = await result.Content.ReadAsStringAsync();
Console.WriteLine(resultContent);
}
但沒有得到上面代碼的天氣是正確的,我也可以使用發送方法而不是 postasync 方法請建議。
使用類似參數的 object 而不是KeyValuePair
internal record User(string Name, string Password);
然后你可以使用通用方法
public async Task<TResult> Post<TResult>(string url, object data)
{
using var client = new HttpClient();
var content = JsonContent.Create(data);
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResult>(result);
}
使用示例:
var user = new User("abc", "password");
var result = await Post<Result>("https://url.com/", user);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.