회사 내외 각종 프로젝트에서 수년간 .NET Core 3.1을 사용하다가 Microsoft에서 공식 지원을 종료한 이후 최근에 와서야 .NET 6으로 업그레이드를 했다.
프레임워크 기본 코드에서 크게 변한 건 별로 없어서 기존 코드를 거의 그대로 다 사용이 가능한데(외부 패키지들은 사용법이 변했거나 더이상 사용되지 않는 코드들이 꽤 있다... 일일이 찾아서 수정해야 한다... ㄷㄷ), 꼭 하나만 꼽자면 BinaryFormatter가 .NET 5부터 사용 중지된 것인데...
using System.Runtime.Serialization.Formatters.Binary;
...
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, source);
return stream.ToArray();
}
즉, 이 코드를 사용할 수 없다. 그래서 아래와 같이 바꿔야 한다.
using System.Text;
using System.Text.Json;
...
// BinaryFormatter 사용중지(.NET 5부터) -> JsonSerializer 사용
using (var stream = new MemoryStream())
{
var obj = JsonSerializer.Serialize(source, JsonSerializerOption.Default);
var writer = new BinaryWriter(stream, Encoding.UTF8, false);
writer.Write(obj);
return stream.ToArray();
}
또 하나를 더 꼽자면 바로 이 글의 주제, WebRequest가 퇴역 대상이 되어 HttpClient로 바꿔야 한다는 것. 물론 아직은 쓸 수 있다. 코드 작성 및 컴파일 시 경고가 자주 등장할 뿐.
인터넷 뒤져보면 WebRequest/HttpWebRequest를 HttpClient로 바꾸는 방법이나 예제들이 무궁무진하니 적당히 골라 사용하면 된다.
그런데,
WebRequest/HttpWebRequest와 HttpClient가 차이가 나는 부분이 하나 있다.
바로 Redirection 처리.
예를 들어 특정 페이지를 GET으로 요청한 경우 해당 페이지가 다른 페이지로 Redirection 처리된 경우가 있는데, 이때 기존 WebRequest/HttpWebRequest에서 이것을 자동으로 처리하게 하지 못하게(즉, 302 Redirect 응답이 발생하게) 하고 싶을 때는 아래와 같이 직접 설정이 가능했다.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetURL);
req.AllowAutoRedirect = false;
기본 동작이 자동 Redirect되는 것이므로 이렇게 해야 막아진다.
그런데 HttpClient에서는 조금 다르다. HttpClient 속성으로 설정이 불가능하다.
HttpClient에서 이를 처리하려면 별도의 HttpClientHandler를 만들어서 설정해야 한다.
이렇게.
using (HttpClientHandler handler = new HttpClientHandler()
{
AllowAutoRedirect = false
})
using (HttpClient client = new HttpClient(handler))
{
...
}
쓸 데 없이 Handler로 분리해놨다는 생각도 들 수 있지만, 뭐 그밖에 여러가지 장점이 있으니 그렇게 한 것이겠지...
(Handler에 추가로 AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate 등을 설정하면 압축이 자동으로 해제되는 등 장점은 분명히 있어 보인다)
끝.
'Tech: > .NET·C#' 카테고리의 다른 글
Visual Studio: 경로에 잘못된 문자가 있습니다 (0) | 2023.10.31 |
---|---|
웹사이트에서 로컬 C# WinForm 프로그램 실행하기 (0) | 2023.04.03 |
Visual Studio 2019 ASP.NET Core 하위 호환성 문제 (0) | 2021.01.07 |
Stream 사용 시 기본 유의사항을 또 까먹고... (0) | 2020.12.24 |
ASP.NET Core Html Helper? Tag Helper! (0) | 2020.12.08 |