Itu Startup class mengonfigurasi layanan dan jalur permintaan aplikasi.

Kelas Startup

Aplikasi ASP.NET Core menggunakan a Startup kelas, yang bernama Startup dengan perjanjian. Itu Startup kelas:

  • Opsional menyertakan metode ConfigureServices untuk mengonfigurasi . aplikasi jasa. Layanan adalah komponen yang dapat digunakan kembali yang menyediakan fungsionalitas aplikasi. Layanan adalah: terdaftar di ConfigureServices dan dikonsumsi di seluruh aplikasi melalui injeksi ketergantungan (DI) atau ApplicationServices.
  • Menyertakan metode Konfigurasi untuk membuat alur pemrosesan permintaan aplikasi.

ConfigureServices dan Configure dipanggil oleh runtime ASP.NET Core saat aplikasi dimulai:

public class Startup

    public Startup(IConfiguration configuration)
    
        Configuration = configuration;
    

    public IConfiguration Configuration  get; 

    public void ConfigureServices(IServiceCollection services)
    
        services.AddRazorPages();
    

    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();
        );
    

Contoh sebelumnya adalah untuk Razor Pages; versi MVC serupa.

Itu Startup class ditentukan saat host aplikasi dibuat. Itu Startup kelas biasanya ditentukan dengan memanggil WebHostBuilderExtensions.UseStartup/<TStartup> metode pada pembuat host:

public class Program

    public static void Main(string[] args)
    
        CreateHostBuilder(args).Build().Run();
    

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            
                webBuilder.UseStartup<Startup>();
            );

Tuan rumah menyediakan layanan yang tersedia untuk Startup konstruktor kelas. Aplikasi ini menambahkan layanan tambahan melalui ConfigureServices. Layanan host dan aplikasi tersedia di Configure dan di seluruh aplikasi.

Hanya jenis layanan berikut yang dapat disuntikkan ke dalam Startup konstruktor saat menggunakan Host Generik (IHostBuilder):

public class Startup

    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    
        Configuration = configuration;
        _env = env;
    

    public IConfiguration Configuration  get; 

    public void ConfigureServices(IServiceCollection services)
    
        if (_env.IsDevelopment())
        
        
        else
        
        
    

Sebagian besar layanan tidak tersedia sampai Configure metode disebut.

Beberapa Startup

Saat aplikasi mendefinisikan terpisah Startup kelas untuk lingkungan yang berbeda (misalnya, StartupDevelopment), yang sepantasnya Startup kelas dipilih saat runtime. Kelas yang akhiran namanya cocok dengan lingkungan saat ini diprioritaskan. Jika aplikasi dijalankan di lingkungan Pengembangan dan menyertakan keduanya a Startup kelas dan StartupDevelopment kelas, itu StartupDevelopment kelas digunakan. Untuk informasi selengkapnya, lihat Menggunakan beberapa lingkungan.

Lihat Tuan rumah untuk informasi lebih lanjut tentang tuan rumah. Untuk informasi tentang penanganan kesalahan selama pengaktifan, lihat Penanganan pengecualian pengaktifan.

Metode ConfigureServices

Metode ConfigureServices adalah:

  • Opsional.
  • Dipanggil oleh tuan rumah sebelum Configure metode untuk mengonfigurasi layanan aplikasi.
  • Di mana opsi konfigurasi diatur oleh konvensi.

Tuan rumah dapat mengonfigurasi beberapa layanan sebelumnya Startup metode disebut. Untuk informasi lebih lanjut, lihat Tuan rumah.

Untuk fitur yang memerlukan pengaturan substansial, ada AddService metode ekstensi di IServiceCollection. Sebagai contoh, MenambahkanDbKonteks, MenambahkanIdentitas Bawaan, MenambahkanEntityFrameworkStore, dan MenambahkanRazorHalaman:

public class Startup
{
    public Startup(IConfiguration configuration)
    
        Configuration = configuration;
    

    public IConfiguration Configuration  get; 

    public void ConfigureServices(IServiceCollection services)
    

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(
            options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddRazorPages();
    

Menambahkan layanan ke wadah layanan membuatnya tersedia di dalam aplikasi dan di Configure metode. Layanan diselesaikan melalui injeksi ketergantungan atau dari ApplicationServices.

Metode Konfigurasi

Metode Configure digunakan untuk menentukan bagaimana aplikasi merespons permintaan HTTP. Pipeline permintaan dikonfigurasi dengan menambahkan komponen middleware ke instance IApplicationBuilder. IApplicationBuilder tersedia untuk Configure metode, tetapi tidak terdaftar dalam wadah layanan. Hosting membuat IApplicationBuilder dan meneruskannya langsung ke Configure.

Templat ASP.NET Core mengonfigurasi saluran dengan dukungan untuk:

public class Startup

    public Startup(IConfiguration configuration)
    
        Configuration = configuration;
    

    public IConfiguration Configuration  get; 

    public void ConfigureServices(IServiceCollection services)
    
        services.AddRazorPages();
    

    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();
        );
    

Contoh sebelumnya adalah untuk Razor Pages; versi MVC serupa.

Setiap Use metode ekstensi menambahkan satu atau lebih komponen middleware ke pipa permintaan. Misalnya, UseStaticFiles mengonfigurasi middleware untuk melayani file statis.

Setiap komponen middleware dalam pipa permintaan bertanggung jawab untuk memanggil komponen berikutnya dalam pipa atau hubungan arus pendek rantai, jika sesuai.

Layanan tambahan, seperti IWebHostEnvironment, ILoggerFactoryatau apa pun yang didefinisikan dalam ConfigureServicesdapat ditentukan dalam Configure tanda tangan metode. Layanan ini disuntikkan jika tersedia.

Untuk informasi lebih lanjut tentang cara menggunakan IApplicationBuilder dan urutan pemrosesan middleware, lihat ASP.NET Core Middleware.

Konfigurasikan layanan tanpa Startup

Untuk mengonfigurasi layanan dan jalur pemrosesan permintaan tanpa menggunakan a Startup kelas, panggilan ConfigureServices dan Configure metode kenyamanan pada pembuat host. Beberapa panggilan ke ConfigureServices menambahkan satu sama lain. Jika banyak Configure panggilan metode ada, yang terakhir Configure panggilan digunakan.

public class Program

    public static void Main(string[] args)
    
        CreateHostBuilder(args).Build().Run();
    

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            
            )
            .ConfigureWebHostDefaults(webBuilder =>
            
                webBuilder.ConfigureServices(services =>
                
                    services.AddControllersWithViews();
                )
                .Configure(app =>
                
                    var loggerFactory = app.ApplicationServices
                        .GetRequiredService<ILoggerFactory>();
                    var logger = loggerFactory.CreateLogger<Program>();
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    var config = app.ApplicationServices.GetRequiredService<IConfiguration>();

                    logger.LogInformation("Logged in Configure");

                    if (env.IsDevelopment())
                    
                        app.UseDeveloperExceptionPage();
                    
                    else
                    
                        app.UseExceptionHandler("/Home/Error");
                        app.UseHsts();
                    

                    var configValue = config["MyConfigKey"];
                );
            );
        );
}

Perpanjang Startup dengan filter startup

Gunakan IStartupFilter:

  • Untuk mengonfigurasi middleware di awal atau akhir dari pipa Configure middleware aplikasi tanpa panggilan eksplisit ke UseMiddleware. IStartupFilter digunakan oleh ASP.NET Core untuk menambahkan default ke awal pipeline tanpa harus membuat pembuat aplikasi secara eksplisit mendaftarkan middleware default. IStartupFilter memungkinkan komponen yang berbeda untuk memanggil UseMiddleware atas nama pembuat aplikasi.
  • Untuk membuat saluran pipa Configure metode. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau setelah middleware ditambahkan oleh perpustakaan.

IStartupFilter mengimplementasikan Konfigurasi, yang menerima dan mengembalikan Action<IApplicationBuilder>. IApplicationBuilder mendefinisikan kelas untuk mengonfigurasi jalur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat pipeline middleware dengan IApplicationBuilder.

Setiap IStartupFilter dapat menambahkan satu atau lebih middlewares dalam pipa permintaan. Filter dipanggil sesuai urutan penambahannya ke wadah layanan. Filter dapat menambahkan middleware sebelum atau setelah melewati kontrol ke filter berikutnya, sehingga mereka menambahkan ke awal atau akhir dari alur aplikasi.

Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Itu RequestSetOptionsMiddleware middleware menetapkan nilai opsi dari parameter string kueri:

public class RequestSetOptionsMiddleware

    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware( RequestDelegate next )
    
        _next = next;
    

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        

        await _next(httpContext);
    

Itu RequestSetOptionsMiddleware dikonfigurasi dalam RequestSetOptionsStartupFilter kelas:

public class RequestSetOptionsStartupFilter : IStartupFilter

    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    
        return builder =>
        
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        ;
    

Itu IStartupFilter terdaftar dalam wadah layanan di ConfigureServices.

public class Program

    public static void Main(string[] args)
    
        CreateHostBuilder(args).Build().Run();
    

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext, config) =>
           
           )
         .ConfigureWebHostDefaults(webBuilder =>
         
             webBuilder.UseStartup<Startup>();
         )
        .ConfigureServices(services =>
        
            services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();
        );

Ketika parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core membuat respons.

Urutan eksekusi middleware diatur oleh urutan IStartupFilter pendaftaran:

  • Beberapa IStartupFilter implementasi dapat berinteraksi dengan objek yang sama. Jika memesan itu penting, pesanlah mereka IStartupFilter pendaftaran layanan agar sesuai dengan urutan yang harus dijalankan oleh middlewares mereka.

  • Perpustakaan dapat menambahkan middleware dengan satu atau lebih IStartupFilter implementasi yang berjalan sebelum atau setelah middleware aplikasi lain yang terdaftar dengan IStartupFilter. Untuk memanggil an IStartupFilter middleware sebelum middleware ditambahkan oleh perpustakaan IStartupFilter:

    • Posisikan pendaftaran layanan sebelum perpustakaan ditambahkan ke wadah layanan.
    • Untuk memanggil sesudahnya, posisikan pendaftaran layanan setelah perpustakaan ditambahkan.

Tambahkan konfigurasi saat startup dari rakitan eksternal

Implementasi IHostingStartup memungkinkan penambahan peningkatan ke aplikasi saat startup dari perakitan eksternal di luar aplikasi Startup kelas. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Sumber daya tambahan

By AKDSEO