.NET
-
[ASP.NET Core] WebAPI 개발 후 OpenAPI 서비스 참조로 Client 생성시 MSB3073 오류 날 경우.NET/ASP.NET Core 2022. 3. 6. 17:30
Swagger 기반 OpenAPI 스펙에 맞춰 Web API 개발 후 Visual Studio 서비스 참조 기능을 통해 Client를 자동생성하는 작업을 테스트 하는데 아래와 같은 오류가 발생했다. 서버쪽은 이상없이 API를 사용할 수 있는 상황이고, https://editor.swagger.io/를 통해 소스코드 생성할 때도 이슈가 보이지 않아 머리 싸메고 있었는데 알고보니 서버쪽 Model 에 설정한 DataAnnotations 가 잘못되어 있었다. public class Order { [Range(0, 99_9999_9999)] // int 형인데 범위가 int 최대크기를 넘어감. 클라이언트에서 Code 생성시 오류날 수 있다. public int Id { get; set; } } long 형식으로..
-
[EFCore] Microsoft.Data.SqlClient.SqlException 오류 뜰 때.NET/개념 및 유용한 팁 2022. 1. 30. 11:48
개발 중인 프로젝트에서 아래와 같은 오류가 발생했다. Microsoft.Data.SqlClient.SqlException: 'A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 신뢰되지 않은 기관에서 인증서 체인을 발급했습니다.)’ 원인은 따로 설치했던 Microsoft.EntityFrameworkCore.SqlServer 패키지에서 참조하는 Microsoft.Data.SqlClient 에 호환되는 버전이 맞지 않으면 발생했던 문제이다. 따로 설치된 Microsoft.Data.SqlClient ..
-
[ASP.NET Core] 미들웨어(Middleware) 다룰때 유의사항.NET/ASP.NET Core 2021. 11. 5. 01:18
ASP.NET Core의 미들웨어는 이미지와 같이 파이프라인 개념으로 동작한다. 따라서 아래와 같은 유의사항이 있다. 1. Request Body Stream을 닫지마라 일반적으론 Reader/Writer를 이용하여 Stream을 사용하면 닫는 코드를 명시적으로 입력하거나, 자동적으로 Close시킨다. 하지만 ASP.NET Core 미들웨어에선 파이프라인 개념으로 동작하므로 다음 Middleware가 올바른 동작을 하기위해선 Stream을 닫지 말아야 한다. 아래소스코드는 모든 Request를 Log로 남기는 간략한 미들웨어 코드이다. app.Use(async (context, next) => { context.Request.EnableBuffering(); // 없으면 오류남. using var rea..
-
[xUnit] 테스트 프로젝트를 로깅(Logging)하는 방법.NET/개념 및 유용한 팁 2021. 10. 31. 13:21
xUnit과 같은 테스트 프로젝트는 각 테스트 함수별 진행에 따른 로그가 별도 표시되어야 할 필요성이 있다. 아래 프로젝트는 webapi 템플릿을 생성할때 나오는 `WeatherForcast` 프로젝트의 Controller 테스트 코드이다. using Microsoft.Extensions.Logging; using System.Linq; using Xunit; using Xunit.Abstractions; namespace WebApiTestCase.Controllers.Tests { public class WeatherForecastControllerTests { private ITestOutputHelper _logger; public WeatherForecastControllerTests(ITest..
-
[ASP.NET Core] Serilog 에서 미들웨어를 이용한 모든 Request 로그 기록 설정.NET/ASP.NET Core 2021. 10. 12. 23:10
Serilog를 통해 모든 Request에서 로그기록을 하고 싶을 경우 LogContext와 미들웨어를 이용해야 한다. * 사실 Serilog는 RequestID property가 기본제공되므로 미들웨어 없이 {RequestId}를 써도 되긴한다. LogContextMiddleware.cs public class LogContextMiddleware { private readonly RequestDelegate _next; public LogContextMiddleware(RequestDelegate next) { _next = next; } public Task Invoke(HttpContext context) { using (LogContext.PushProperty("TraceId", context..
-
[.NET] 유효성(Validation)검사 코드를 간결하게 작성하는데 도움주는 GuardClauses 소개.NET/유용한 라이브러리 2021. 9. 25. 22:03
프로그램 개발을 진행하다보면 특정 변수값에 대해 유효성검사를 해야 한다. 특정 유효성은 개발하는 시스템에 관련된 사항에 따라 직접 작성해야 하지만 일반적으로 null이면 안되는데, null이 들어오거나, 0이 들어오면 안되는데 0이 들어오는 문제에 대해선 어느 프로그램을 개발해도 공통적으로 처리해야할 검사코드가 될 것이다. 이번에 소개할 라이브러리는 일반적인 상황에 대한 유효성검사 코드 작성을 간결하는데 도움을 주는 GuardClauses 란 라이브러리이다. 아래 코드는 GuardClauses 를 적용하기 전 소스코드이다. Order 라는 객체를 생성하는데, 유효하지 않은 매개변수를 받아 처리하려고 한다. class Program { static void Main(string[] args) { try {..
-
[ASP.NET Core] 기본 로그를 지우고 Serilog만 나오도록 수정하는 방법.NET/ASP.NET Core 2021. 9. 22. 23:03
NET5 기준으로 ASP.NET Core 프로젝트를 생성하면 Program.cs 파일에 CreateHostBuilder() 함수가 기본 생성된다. 해당 함수에는 Host.CreateDefaultBuilder(args) 및 ConfigureWebHostDefaults() 함수를 호출하여 웹 서비스에 필요한 기본적인 설정사항등을 별도 작업없이 추가해주는데 이때 MS에서 기본제공하는 Log 제공자(Provider)도 추가된다. Serilog 와 같이 서드파티 제공자를 사용하고 싶다면 CreateHostBuilder를 아래와 같이 수정하여 MS 기본 제공 Log 공급자를 제거해야 한다. public static IHostBuilder CreateHostBuilder(string[] args) => Host.Cr..
-
[ASP.NET Core] AddSingleton(), AddScoped(), AddTransient() 차이점 - 1.NET/ASP.NET Core 2021. 9. 12. 22:54
ASP.NET Core에서 의존성 주입에 의해 추가되는 Service는 크게 3가지 생명주기를 지닌다. AddSingleton AddScoped AddTransient AddSingleton의 경우는 클라이언트(보통 웹브라우저)의 접속상태에 관계없이, 웹 서비스 시작 때 생성되서, 웹 서비스가 종료될때까지 유지된다. Singleton이란 이름에 걸맞게, 클라이언트가 아무리 많이 붙어도 오직 1개의 서비스만 존재하게 된다. AddScoped는 클라이언트의 Request 시작부터, Response 종료까지 유지된다. 각 클라이언트마다 존재하므로, 연결되는 클라이언트 수 만큼 존재하게 될 수 있다. AddTransient는 의존성 주입한 객체마다 독립적인데, 그냥 간단한 교육용 예제 서비스에선 AddScope..