.NET/ASP.NET Core
-
[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 형식으로..
-
[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..
-
[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..
-
[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..
-
[ASP.NET Core] AddController(), AddMvc(), AddControllersWithViews(), AddRazorPages() 차이점.NET/ASP.NET Core 2021. 6. 26. 11:33
ASP.NET Core에서 MVC 템플릿으로 프로젝트를 생성하면 Startup 클래스의 ConfigureServices 메소드에서AddControllersWithViews()를 확인할 수 있다. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } 함수 이름으로 유추해봐도 알 수 있듯이, MVC 모델의 Controller와 View를 ASP.NET Core에서 사용하겠다는 뜻을 의미한다. 그런데 AddControllersWithViews 가 아닌, AddMVC를 사용해도 문제없이 동작하는 것을 확인할 수 있다. 이 메소드들은 공통적으로 MvcServiceCollectionExtens..
-
[ASP.NET Core] 세상 간편해진 Video/Audio Streaming.NET/ASP.NET Core 2021. 4. 21. 22:36
예전에 개선된 다운로드 예제를 작성하면서 확인하게된 EnableRangeProcessing 옵션을 테스트해보고자 코드 몇 줄 끄적였다. true로 설정한 채 mp4, mp3 같은 미디어 파일을 반환하면 자동으로 스트리밍 처리가 된다는 것이다. 테스트를 위해 mvc프로젝트를 생성하고 간단한 StreamingController 를 생성해보았다. StreamingController.cs using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace StreamingEx..
-
[ASP.NET Core] 개선된 다운로드 예제(feat. ASP.NET을 쓰지 말아야할 이유 1 Stack 추가).NET/ASP.NET Core 2021. 4. 15. 23:02
예전에 ASP.NET Core로 일반적인 파일 다운로드 기능 구현 예제를 만든적이 있었다. (ddochea.tistory.com/76) 해당 예제에선 파일을 다운로드할 때 byte[] 버퍼에 담아 전달하도록 작성했었는데, 그 이유는 크기가 큰 파일을 전달할때 생기는 메모리 사용 문제점, 그리고 이를 해결하기위한 스트리밍 방법인 "HTTP range requests" 예제를 구현하고 비교하는 포스트를 작성하기 위한 일종의 큰 그림(?) 이었다. "HTTP range requests"에 관한 정보는 아래 링크에서 확인할 수 있다. developer.mozilla.org/ko/docs/Web/HTTP/Range_requests HTTP range requests - HTTP | MDN HTTP range re..