πŸͺŸ
ASP.NET Core
WebAPI ServerASP.NET CoreMain Subject
  • Intro
  • Program.cs
  • Dependency Injection
  • Host
  • MVC
  • Middleware
  • Model Binding
  • Controller
  • Configure
  • Logging
  • Library
    • WebApplicationzBuilder
  • Example Code
    • basic01
    • basic02
    • basic03
    • basic04
    • basic05
    • basic06
    • basic07
Powered by GitBook
On this page
  • program.cs
  • LoadRequestDataMiddlerWare.cs
  • MiddlewareExtentions.cs
  1. Example Code

basic06

Previousbasic05Nextbasic07

Last updated 1 year ago

의 μ‚¬μš© 방법에 λŒ€ν•œ 예제 μ½”λ“œμž…λ‹ˆλ‹€. λ―Έλ“€μ›¨μ–΄λŠ” λ“±λ‘ν•œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜κΈ°μ—, program.csμ—μ„œ μˆœμ„œλ₯Ό 잘 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

program.cs

  • Routingκ³Ό Endpoint(Controller) 사이에 두 κ°€μ§€ 미듀웨어가 μ‚½μž…λ˜μ–΄, μ‚½μž…λœ μˆœμ„œλŒ€λ‘œ 싀행됨

  • μ‚¬μš©μž μ§€μ • λ―Έλ“€μ›¨μ–΄λŠ” [MiddlerWare] 디렉토리 μ•ˆμ— μ •μ˜λ˜μ–΄μžˆμŒ

    // program.cs
    app.UseRouting();
    
    app.UseLoadRequestDataMiddlerWare();
    app.UseCheckUserSessionMiddleWare();
    
    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

LoadRequestDataMiddlerWare.cs

  • λ―Έλ“€μ›¨μ–΄λŠ” 클래슀둜 μ •μ˜λ˜μ–΄μ•Ό ν•˜κ³  λ‹€μŒκ³Ό 같은 μš”μ†Œλ₯Ό κ°€μ§€κ³  μžˆμ–΄μ•Ό 함

  1. ν”„λ ˆμž„μ›Œν¬μ—μ„œ ν•΄λ‹Ή 미듀웨어 μ‹€ν–‰ ν›„ λ‹€μŒ 미듀웨어가 λ™μž‘ν•  수 있게 ν•˜κΈ° μœ„ν•΄μ„œ λŒ€λ¦¬μž(delegate)λ₯Ό μ„€μ •ν•΄μ€˜μ•Ό 함

    private readonly RequestDelegate _next;
    
    public LoadRequestDataMiddlerWare(RequestDelegate next)
    {
        _next = next;
    }
  2. 미듀웨어가 μ‹€ν–‰λ˜λŠ” μ½”λ“œλŠ” Invoke λ˜λŠ” InvokeAsyncλΌλŠ” 곡용 λ©”μ„œλ“œμ— μ •μ˜ λ˜μ–΄μ•Ό 함

    • basic06의 경우 public async Task InvokeAsync(HttpContext context) 둜 μ •μ˜ 및 κ΅¬ν˜„ λ˜μ–΄ 있음

    • λΉ„λ™κΈ°μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” InvokeAsyncλ₯Ό κ΅¬ν˜„ν•΄μ•Ό 함

    • 이 λ©”μ„œλ“œλŠ” Taskλ₯Ό λ°˜ν™˜ν•΄μ•Ό 함

    • μ μ ˆν•œ μ‹œμ μ— awit둜 _next(context)λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ‹€μŒ λ―Έλ“€μ›¨μ„œ μ‹€ν–‰

  3. CheckUserSessionMiddleWare.cs, LoggingMiddleware.cs도 이와 같은 ꡬ쑰

  4. _next(context)λ₯Ό 호좜

    • 미듀웨어 λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ _next 미듀웨어 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 ꡬ쑰둜 μ‹€ν–‰λœλ‹€κ³  λ³Ό 수 있음

    1. Middleware1 λ©”μ†Œλ“œ μ•ˆμ—μ„œ `await _next(context)`으둜 Middleware2 λ©”μ†Œλ“œ 호좜. 
    2. Middleware2 λ©”μ†Œλ“œ μ•ˆμ—μ„œ 또 `await _next(context)` Middleware3 λ©”μ†Œλ“œ 호좜.
    3. Middleware λ©”μ†Œλ“œμ—μ„œ κ³„μ†ν•΄μ„œ next Middleware λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•¨
    4. EndPoint Middleware(nextκ°€ μ—†λŠ” λ§ˆμ§€λ§‰ 미듀웨어)μ—μ„œλŠ” void λ˜λŠ” μ–΄λ–€ 값을 λ¦¬ν„΄ν•˜λ©΄μ„œ μ’…λ£Œ.
    5. 이전 λ©”μ†Œλ“œμ—μ„œ `await _next(context)`의 λ‹€μŒ 쀄 μ½”λ“œλΆ€ν„° μ΄μ–΄μ„œ 계속 μ§„ν–‰ν•˜λ‹€κ°€ void λ˜λŠ” μ–΄λ–€ 값을 λ¦¬ν„΄ν•˜λ©΄μ„œ μ’…λ£Œ.
    6. λκΉŒμ§€ λŒμ•„μ™€μ„œ ν”„λ ˆμž„μ›Œν¬ λ‚΄λΆ€μ—μ„œ λ™μž‘ν•˜λŠ” 객체가 Responseλ₯Ό 보냄

MiddlewareExtentions.cs

  1. ν™•μž₯ λ©”μ„œλ“œ μΆ”κ°€ν•˜κΈ°

    • μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆκΈ° λ•Œλ¬Έμ—, program.csμ—μ„œ app.UseLoadRequestData(), app.UseCheckUserSessionMiddleWare()λ₯Ό μ‚¬μš©ν•  수 있음;

    public static class MiddlewareExtentions
    {           
        public static IApplicationBuilder UseLoadRequestDataMiddlerWare(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<LoadRequestDataMiddlerWare>();
        }
    
        public static IApplicationBuilder UseCheckUserSessionMiddleWare(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<CheckUserSessionMiddleWare>();
        }  
    }
  2. LoggingMiddlewareExtensions.cs도 이와 같은 ꡬ쑰

μ‚¬μš©μž μ§€μ • 미듀웨어