.NET Core 어플리케이션은 Program.cs 파일에 어플리케이션 시작 코드를 포함한다.
Program.cs 구성요소
1. 서비스 추가
2. HTTP Request Pipeline 구성요소
Program.cs 소스 예시)
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
//컨테이너에 서비스를 추가한다.
//DI프레임워크가 런타임에 이 서비스의 인스턴스를 제공한다.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline
//HTTP Request Pipeline을 구성한다.
//Run, Map, Use 확장메서드를 사용하여 구성한다.
//미들웨어는 Use 확장메서드를 호출하여 파이프라인에 추가되며, 추가된 순서로 실행된다.
if (!app.Environment.IsDevelopment()) {
app.UseExceptionHandler("/Error"); app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
//특정 URL을 위한 특정 미들웨어를 추가할때 Map 확장메서드를 사용한다.
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
//Run delegate는 pipeline을 종료시키며, 마지막에 한번만 사용된다.
//Run 뒤의 추가되는 Use, Run은 호출되지 않는다.
app.Run();
//Run 확장메서드를 사용하여, 아래와 같이 terminal middleware를 추가할 수 있다.
//app.Run(async context => {
// await context.Response.WriteAsync("Response");
//});
Middleware 실행순서
next parameter는 파이프라인의 다음 delegate를 나타내며, next를 호출하면 다음 middleware가 실행되고, 호출하지 않으면 파이프라인이 단락(short-circuit)된다.
app.Use(async (context, next) =>
{
Console.WriteLine("Use Middleware1 Incoming Request \n");
await next();
Console.WriteLine("Use Middleware1 Outgoing Response \n");
});
app.Use(async (context, next) =>
{
Console.WriteLine("Use Middleware2 Incoming Request \n");
await next();
Console.WriteLine("Use Middleware2 Outgoing Response \n");
});
app.Run();
Console output :
Use Middleware1 Incoming Request
Use Middleware2 Incoming Request
Use Middleware2 Outgoing Response
Use Middleware1 Outgoing Response
Middleware2에서 다음 Middleware를 호출했지만, 더 이상 등록된 Middleware가 없으므로, Request는 되돌아간다.
남은 소스코드가 있는지 확인하여 실행하며 되돌아간다.
'ASP.NET Core' 카테고리의 다른 글
.NET 6] Minimal APIs VS MVC APIs 차이점 (0) | 2022.06.15 |
---|---|
.NET 6] SignalR Server, SignalR Client App (0) | 2022.06.09 |
.NET 6 API with Redis] 4. API using Hashes Data Type (0) | 2022.05.18 |
.NET 6 API with Redis] 3. Model , Repository, Controller구성 (0) | 2022.05.18 |
.NET 6 API with Redis] 2. docker를 사용해서 redis 컨테이너 구성 (0) | 2022.05.18 |
댓글