반응형

.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에서 개발하니 조금 더 좋은 코드가 생산될 것 같다.

반응형

+ Recent posts