■ UseExtensions 클래스의 Use 확장 메소드를 사용해 엔드포인트를 추적하는 방법을 보여준다.
▶ Startup.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Threading.Tasks; namespace TestProject { /// <summary> /// 시작 /// </summary> public class Startup { //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region 구성 - Configuration /// <summary> /// 구성 /// </summary> public IConfiguration Configuration { get; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - Startup(configuration) /// <summary> /// 생성자 /// </summary> /// <param name="configuration">구성</param> public Startup(IConfiguration configuration) { Configuration = configuration; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 서비스 컬렉션 구성하기 - ConfigureServices(services) /// <summary> /// 서비스 컬렉션 구성하기 /// </summary> /// <param name="services">서비스 컬렉션</param> public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } #endregion #region 구성하기 - Configure(app, environment) /// <summary> /// 구성하기 /// </summary> /// <param name="app">애플리케이션 빌더</param> /// <param name="environment">웹 호스트 환경</param> public void Configure(IApplicationBuilder app, IWebHostEnvironment environment) { if(environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 위치 1 : 라우팅이 실행되기 전에 여기서 엔드 포인트는 항상 널이다. app.Use ( next => context => { Console.WriteLine($"1. ENDPOINT : {context.GetEndpoint()?.DisplayName ?? "(NULL)"}"); return next(context); } ); app.UseRouting(); // 위치 2 : 라우팅이 실행된 후 라우팅이 일치하는 것을 발견하면 엔드 포인트가 널이 아니다. app.Use ( next => context => { Console.WriteLine($"2. ENDPOINT : {context.GetEndpoint()?.DisplayName ?? "(NULL)"}"); return next(context); } ); app.UseAuthorization(); app.UseEndpoints ( endpoints => { // 위치 3 : 이 엔드 포인트가 일치할 때 실행된다. endpoints.MapGet ( "/", context => { Console.WriteLine($"3. ENDPOINT : {context.GetEndpoint()?.DisplayName ?? "(NULL)"}"); return Task.CompletedTask; } ).WithDisplayName("HELLO"); } ); // 위치 4 : UseEndpoints 이후 실행 - 일치하는 항목이 없는 경우에만 실행된다. app.Use ( next => context => { Console.WriteLine($"4. ENDPOINT : {context.GetEndpoint()?.DisplayName ?? "(NULL)"}"); return next(context); } ); } #endregion } } |