OpenCVSharp를 사용해서 Image Processing을 하는 WebAPI 어플리케이션을 작성하고 Docker Container를 빌드 한 다음 해당 API를 호출 해보면 OpeCVSharp 함수 호출 시 DllNotFoundException 오류가 발생합니다. 해당 컨테이너에 Linux 커널에 맞는 OpenCVSharp 라이브러리 바이너리가 없어서 발생하는 문제인데 OpenCVSharp 코드를 내려받아 라이브러리를 컴파일후 /usr/lib/ 디렉토리에 복사하도록 아래 내용을 Dockerfile에 추가 해야 합니다. ENV OPENCV_VERSION=4.8.0 # Install opencv dependencies RUN apt-get update && apt-get -y install --no-i..
ASP..Net core로 WebAPI 서버를 자주 개발하는데 종종 Angular로 만든 프론트를 wwwroot 폴더에 넣어서 함께 종종 배포하곤 합니다. 이 때, Angular web app에서 별도로 routing을 하는 경우 ASP.Net에서 먼저 http 요청을 처리하기 때문에 브라우저에서 페이지 생신시 요청되는 url이 WebAPI에서 알지 못하는 주소라서 404 Not Found를 뿜어냅니다. 이럴 때 root 경로로 redirect 해주면 간단히 해결됩니다. app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404) { context.Request.Path = "/"; await next();..
.Net 6 에서 ASP.Net core 프로젝트를 빌드해서 Windows Service에 등록 한 다음 서비스를 시작했는데 에러가 발생했다면 우선 Event Log Viewer 에서 Exception 메세지를 먼저 확인 합니다. Windows Logs -> Application 에서 .Net Runtime Error 내용을 들여다 보면 Exception이 발생한 코드의 위치가 나오는데, 해당 코드가 appsettings.json에서 읽어온 configuration을 access하는 코드라면 아래 옵션을 추가해서 간단히 해결 가능합니다. var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, ContentRoo..
아래 코드를 추가해주면 됩니다. builder.Services.AddSwaggerGen(c => { c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization header using the Bearer scheme." }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurit..
ASP.Net에서 WebAPI endpoint 호출시 JSON형식 응답 메세지의 property name을 camel case로 변환하도록 기본 설정되어 있습니다. C#에서는 public class 멤버 변수의 이름을 Pascal Case를 주로 쓰기 때문에 camel case 변환을 원하지 않는 경우 아래 코드를 program.cs 파일에 추가해주시면 됩니다. builder.Services .AddControllersWithViews() .AddJsonOptions(opt => opt.JsonSerializerOptions.PropertyNamingPolicy = null);
초기 WebAPI 프로젝트를 할 때 테스트를 위해 모든 origin을 허용하는 CORS 설정이 필요할 때가 있습니다. 아래와 같이 간단히 "corsapp" 이름의 policy를 하나 추가한 다음 builder 빌드 후에 app.UseCors를 호출해주면 됩니다. builder.Services.AddCors(p => p.AddPolicy("corsapp", builder => { builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader(); })); var app = builder.Build(); app.UseCors("corsapp");