Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Cách dùng phương thức Configure() của lớp Startup trong C# ASP.NET Core

Phương thức Configure nằm bên trong lớp Startup của ứng dụng ASP.NET Core.

Phương thức Configure là nơi bạn cấu hình application request pipeline cho ứng dụng của mình sử dụng instance IApplicationBuilder được cung cấp bởi built-in IoC container.

Phương thức Configure mặc định có ba tham số: IApplicationBuilder, IWebHostEnvironment và ILoggerFactory.

Tại runtime, phương thức ConfigureServices được gọi trước phương thức Configure. Điều này để đăng ký custom service với IoC container mà có thể được dùng trong phương thức Configure.

  • IWebHostEnvironment: Cung cấp thông tin về web hosting environment ứng dụng đang chạy.
  • IApplicationBuilder: Định nghĩa class cung cấp cơ chế để cấu hình request pipeline của ứng dụng.

Ví dụ

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { 
    if (env.IsDevelopment()) { 
        app.UseDeveloperExceptionPage(); 
    } else { 
        app.UseExceptionHandler("/Error"); 
        app.UseHsts(); 
    } 
    app.UseHttpsRedirection(); 
    app.UseStaticFiles(); 
    app.UseRouting(); 
    app.UseAuthorization(); 
    app.UseEndpoints(endpoints => { 
        endpoints.MapRazorPages(); 
    }); 
}

Thứ tự Middleware quan trọng

Thứ tự đăng ký middleware trong Configure quyết định thứ tự xử lý request:

  1. Exception Handling (UseDeveloperExceptionPage / UseExceptionHandler) - Đầu tiên để bắt lỗi từ các middleware sau
  2. HTTPS Redirection (UseHttpsRedirection)
  3. Static Files (UseStaticFiles) - Phục vụ file tĩnh trước routing
  4. Routing (UseRouting) - Xác định endpoint
  5. Authentication (UseAuthentication) - Xác thực user
  6. Authorization (UseAuthorization) - Phân quyền
  7. Endpoints (UseEndpoints) - Thực thi endpoint (Controller, Razor Pages, v.v.)

Cấu hình theo Environment

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    // Chỉ dùng trong Development
    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    // Chỉ dùng trong Staging/Production
    else if (env.IsStaging()) {
        app.UseExceptionHandler("/Error/Staging");
        app.UseHsts();
    }
    else {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    // Chung cho mọi environment
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints => {
        endpoints.MapControllers();
        endpoints.MapRazorPages();
    });
}

IWebHostEnvironment hữu ích

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    // Kiểm tra environment
    bool isDev = env.IsDevelopment();
    bool isStaging = env.IsStaging();
    bool isProd = env.IsProduction();
    bool isCustom = env.IsEnvironment("Testing");
    
    // Lấy đường dẫn
    string contentRoot = env.ContentRootPath;
    string webRoot = env.WebRootPath; // wwwroot
    
    // Environment name
    string envName = env.EnvironmentName; // "Development", "Production", v.v.
}