개발/C#
WebRequest이 아닌, HttpClient를 사용하자! (feat. .Net 6)
한번사는인생.
2023. 3. 26. 16:58
반응형
.Net5를 사용하다가, VS2022 사용을 위해 프로젝트 .Net6 버전업을 결정.
.Net6 버전업을 하고 난 다음 빌드를 하니 경고에 떡하니 아래와 같은 메세지가 발생했다.
구글링해서 아래와 같은 내용을 발견했다.
https://learn.microsoft.com/ko-kr/dotnet/core/compatibility/networking/6.0/webrequest-deprecated
호환성이 손상되는 변경: WebRequest, WebClient, ServicePoint는 더 이상 사용되지 않음 - .NET
WebRequest, WebClient 및 ServicePoint가 더 이상 사용되지 않고 대신 HttpClient가 사용되는 .NET 6의 호환성이 손상되는 변경에 대해 알아봅니다.
learn.microsoft.com
WebRequest, WebClient, ServicePoint 클래스를 사용하지말고, HttpClient 클래스를 이용해라.
빌드했을때, 경고 메세지가 지속적으로 발생하여 HttpClient로 변경하기로 결정.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
// WebRequest 사용.
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Method = HttpMethod.Get.ToString();
// 헤더 추가.
if ((headers?.Count ?? 0) > 0) {
foreach (var key in headers.Keys) {
request.Headers.Add(key, headers[key]);
}
}
var result = Empty;
try {
// ASYNC: using awaitable wrapper to get response
var response = (HttpWebResponse)await request.GetResponseAsync();
if (response != null) {
var reader = new StreamReader(response.GetResponseStream());
// ASYNC: using StreamReader's async method to read to end, in case
// the stream i slarge.
result = await reader.ReadToEndAsync();
}
} catch (WebException we) {
var reader = new StreamReader(we.Response.GetResponseStream());
result = reader.ReadToEnd();
}
///////////////////////////////////////////////////////////////////////////////////
// HttpClient 사용.
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Accept.Clear();
// 헤더 추가.
if ((headers?.Count ?? 0) > 0) {
foreach (var key in headers.Keys) {
client.DefaultRequestHeaders.Add(key, headers[key]);
}
}
using (var response = await client.GetAsync(uri)) {
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
|
cs |
코드량도 짧아지고 나이스해졌다.
확실히 .Net 6에서 개발하니 조금 더 좋은 코드가 생산될 것 같다.
반응형