Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.
Aplikasi ASP.NET Core mengonfigurasi dan meluncurkan host. Host bertanggung jawab atas startup aplikasi dan pengelolaan siklus hidup. Minimal, host mengonfigurasi server dan alur pemrosesan permintaan. Host juga dapat menyiapkan pengelogan, injeksi dependensi, dan konfigurasi.
Artikel ini membahas Web Host, yang tetap tersedia hanya demi kompatibilitas ke belakang. Templat ASP.NET Core membuat WebApplicationBuilder dan WebApplication, yang direkomendasikan untuk aplikasi web. Untuk informasi selengkapnya tentang WebApplicationBuilder dan WebApplication, lihat Migrasi dari ASP.NET Core di .NET 5 ke .NET 6.
Menyiapkan host
Buat host dengan menggunakan instans IWebHostBuilder. Tugas ini biasanya dilakukan di titik masuk aplikasi, Main metode dalam file Program.cs . Aplikasi biasanya memanggil metode CreateDefaultBuilder untuk mulai menyiapkan host.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Kode yang memanggil CreateDefaultBuilder berada dalam metode bernama CreateWebHostBuilder, yang memisahkannya dari kode dalam Main yang memanggil Run metode pada objek penyusun. Pemisahan diperlukan jika Anda menggunakan alat Entity Framework Core. Alat mengharapkan adanya metode CreateWebHostBuilder yang bisa dipanggil pada waktu desain untuk mengonfigurasi host tanpa menjalankan aplikasi. Alternatifnya adalah membuat instans IDesignTimeDBContextfactory. Untuk informasi selengkapnya, lihat Pembuatan DbContext Saat Waktu Desain.
Metode CreateDefaultBuilder melakukan tugas-tugas berikut:
Kestrel Mengonfigurasi server sebagai server web dengan menggunakan penyedia konfigurasi hosting aplikasi. Untuk opsi default Kestrel server, lihat Mengkonfigurasi opsi untuk server web ASP.NET Core Kestrel.
Mengatur akar konten ke jalur yang dikembalikan oleh GetCurrentDirectory.
Memuat konfigurasi host dari sumber berikut:
- Variabel lingkungan diawali dengan
ASPNETCORE_(misalnya,ASPNETCORE_ENVIRONMENT) - Argumen baris perintah
- Variabel lingkungan diawali dengan
Memuat konfigurasi aplikasi dalam urutan berikut:
- file appsettings.json
- appsettings.{Environment}.json
-
Rahasia pengguna (Dimuat saat aplikasi berjalan di
Developmentlingkungan dengan menggunakan rakitan entri.) - Variabel lingkungan
- Argumen baris perintah
Mengonfigurasi pengelogan output konsol dan debug. Pencatatan log mencakup aturan pemfilteran log yang ditentukan di bagian konfigurasi pencatatan log pada file appsettings.json atau appsettings.{Environment}.json.
Ketika aplikasi berjalan di belakang IIS dengan modul ASP.NET Core,
CreateDefaultBuildermemungkinkan Integrasi IIS, yang mengonfigurasi alamat dasar aplikasi dan port. Integrasi IIS juga mengonfigurasi aplikasi untuk menangani kesalahan startup. Untuk opsi default IIS, lihat Host ASP.NET Core di Windows dengan IIS.ValidateScopes Mengatur properti ke
true, jika lingkungan aplikasi adalahDevelopment. Untuk informasi selengkapnya, lihat Mengonfigurasi validasi cakupan.
Akar konten menentukan di mana host mencari file konten, seperti file tampilan MVC. Saat aplikasi diluncurkan dari folder akar proyek, folder tersebut digunakan sebagai akar konten. Perilaku ini adalah default untuk Visual Studio dan templat baru dotnet.
Untuk informasi selengkapnya tentang konfigurasi aplikasi, lihat Konfigurasi di ASP.NET Core.
Catatan
Sebagai alternatif untuk menggunakan metode statis CreateDefaultBuilder , Anda dapat membuat host dari WebHostBuilder dengan ASP.NET Core 2.x.
Saat menyiapkan host, Anda dapat menggunakan metode Configure dan ConfigureServices. Jika kelas Startup ditentukan, kelas tersebut harus menentukan metode Configure. Untuk informasi selengkapnya, lihat Pengaktifan aplikasi di ASP.NET Core. Beberapa panggilan ke ConfigureServices menggabungkan satu sama lain. Beberapa panggilan ke Configure atau UseStartup pada WebHostBuilder instans menggantikan pengaturan sebelumnya.
Metode untuk mengesampingkan konfigurasi
Anda dapat mengubah dan meningkatkan konfigurasi yang ditentukan oleh CreateDefaultBuilder. Gunakan metode ConfigureAppConfiguration dan ConfigureLogging, serta metode lain dan metode ekstensi dari IWebHostBuilder.
Berikut adalah beberapa contoh:
ConfigureAppConfiguration digunakan untuk menentukan properti lain
IConfigurationuntuk aplikasi. Panggilan berikut keConfigureAppConfigurationmetode menambahkan delegasi untuk menyertakan konfigurasi aplikasi dalam file appsettings.xml .ConfigureAppConfigurationdapat dipanggil beberapa kali. Konfigurasi ini tidak berlaku untuk host (misalnya, URL atau lingkungan server). Untuk informasi selengkapnya, lihat bagian Nilai konfigurasi host .WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true); }) ...Panggilan berikut
ConfigureLoggingmenambahkan delegasi untuk mengonfigurasi tingkat pengelogan minimum (SetMinimumLevel) ke LogLevel. Pengaturan ini mengambil alih pengaturan dalam file appsettings.Development.json (LogLevel.Debug) dan file appsettings.Production.json (LogLevel.Error) yang dikonfigurasiCreateDefaultBuilderoleh metode .ConfigureLoggingdapat dipanggil beberapa kali.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...Panggilan berikut untuk
ConfigureKestrelmengambil alih Limits.MaxRequestBodySize default sebesar 30.000.000 byte yang ditetapkan saat Kestrel dikonfigurasi denganCreateDefaultBuildermetode :WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
Mengatur nilai konfigurasi Web Host
WebHostBuilder Instans bergantung pada pendekatan berikut untuk mengatur nilai konfigurasi host:
Konfigurasi pembangun host, yang mencakup variabel lingkungan yang menggunakan format
ASPNETCORE_{configurationKey}. Contohnya,ASPNETCORE_ENVIRONMENT.Ekstensi, seperti UseContentRoot dan UseConfiguration. Untuk informasi selengkapnya, lihat Mengambil alih konfigurasi Web Host.
Metode UseSetting dan kunci terkait. Saat Anda menetapkan nilai dengan
UseSetting, nilai diatur sebagai string, terlepas dari jenisnya.
Host menggunakan opsi mana pun yang terakhir kali menetapkan nilai. Untuk informasi selengkapnya, lihat Mengambil alih konfigurasi Web Host.
Nama aplikasi
Menentukan nama rakitan yang berisi titik masuk untuk aplikasi.
Kunci : applicationName
Jenis: string
Default: Nama assemblasi yang memiliki titik masuk utama aplikasi.
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_APPLICATIONNAME
Properti IWebHostEnvironment.ApplicationName secara otomatis diatur ketika metode UseStartup atau Configure dipanggil selama konstruksi host. Untuk mengatur nilai secara eksplisit, gunakan ApplicationKey bidang .
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
Menangkap kesalahan startup
Mengontrol penangkapan kesalahan startup.
Kunci : captureStartupErrors
Jenis: bool (true atau 1)
Default: false. Jika aplikasi berjalan dengan Kestrel di belakang IIS, defaultnya adalah true.
Atur menggunakan: CaptureStartupErrors
Variabel lingkungan: ASPNETCORE_CAPTURESTARTUPERRORS
Kesalahan selama startup mengakibatkan host berhenti beroperasi ketika pengaturan menjadi false. Ketika diatur ke true, host menangkap pengecualian selama startup dan mencoba memulai server.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
Akar konten
Menentukan di mana ASP.NET Core mulai mencari file konten.
Kunci : contentRoot
Jenis: string
Default: Folder yang berisi rakitan aplikasi.
Atur menggunakan: UseContentRoot
Variabel lingkungan: ASPNETCORE_CONTENTROOT
Akar konten juga digunakan sebagai jalur dasar untuk web root. Jika jalur akar konten tidak ada, host gagal memulai.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
Untuk informasi selengkapnya, lihat:
Kesalahan terperinci
Menentukan apakah akan menangkap kesalahan terperinci.
Kunci : detailedErrors
Jenis: bool (true atau 1)
Default: false
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_DETAILEDERRORS
Saat diaktifkan (atau saat nilai Lingkungan diatur ke Development), aplikasi menangkap pengecualian terperinci.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Lingkungan
Mengatur lingkungan aplikasi.
Kunci : environment
Jenis: string
Default: Production
Atur menggunakan: UseEnvironment
Variabel lingkungan: ASPNETCORE_ENVIRONMENT
Lingkungan dapat diatur ke nilai apa pun. Nilai yang ditentukan kerangka kerja meliputi Development, Staging, dan Production. Nilai tidak peka terhadap huruf besar/kecil.
Secara default, Lingkungan dibaca dari ASPNETCORE_ENVIRONMENT variabel lingkungan. Saat Anda menggunakan Visual Studio, variabel lingkungan dapat diatur dalam file launchSettings.json . Untuk informasi selengkapnya, lihat lingkungan runtime ASP.NET Core.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
Penyelenggaraan pertemuan startup
Menyediakan string yang dipisahkan dengan titik koma dari komponen startup hosting untuk dimuat saat startup.
Kunci : hostingStartupAssemblies
Jenis: string
Default: String kosong.
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
Meskipun nilai konfigurasi secara default adalah string kosong, rakitan startup hosting selalu menyertakan rakitan aplikasi. Ketika rakitan startup hosting disediakan, rakitan tersebut ditambahkan ke perakitan aplikasi untuk dimuat saat aplikasi membangun layanan umum pada saat startup.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
Port HTTPS
Mengatur port HTTPS untuk pengalihan jika Anda mendapatkan koneksi non-HTTPS.
Kunci : https_port
Jenis: string
Default: Tidak ada default.
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_HTTPS_PORT
Pengaturan ini digunakan dalam memberlakukan HTTPS. Pengaturan ini tidak menyebabkan server mendengarkan port yang ditentukan. Artinya, dimungkinkan untuk mengalihkan permintaan secara tidak sengaja ke port yang tidak digunakan.
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
Startup hosting mengecualikan rakitan
Menyediakan string rakitan startup hosting yang dibatasi titik koma untuk dikecualikan pada startup.
Kunci : hostingStartupExcludeAssemblies
Jenis: string
Default: String kosong.
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
Utamakan URL yang dihosting
Menunjukkan apakah host harus mendengarkan URL yang dikonfigurasi dengan WebHostBuilder alih-alih URL yang dikonfigurasi dengan implementasi IServer.
Kunci : preferHostingUrls
Jenis: bool (true atau 1)
Default: false
Atur menggunakan: PreferHostingUrls
Variabel lingkungan: ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(true)
Mencegah pemulaian hosting
Mencegah pemuatan otomatis rakitan startup hosting, termasuk rakitan startup hosting yang dikonfigurasi oleh rakitan aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.
Kunci : preventHostingStartup
Jenis: bool (true atau 1)
Default: false
Atur menggunakan: UseSetting
Variabel lingkungan: ASPNETCORE_PREVENTHOSTINGSTARTUP
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
URL Server
Menunjukkan alamat IP atau alamat host dengan port dan protokol yang harus didengarkan server untuk permintaan.
Kunci : urls
Jenis: string
Default: http://localhost:5000
Atur menggunakan: UseUrls
Variabel lingkungan: ASPNETCORE_URLS
Atur ke sebuah daftar awalan URL yang dipisahkan dengan ; titik koma yang akan direspons oleh server. Contohnya,http://localhost:123. Gunakan wildcard tanda bintang * untuk menunjukkan bahwa server harus mendengarkan permintaan pada alamat IP atau nama host mana pun dengan port dan protokol yang ditentukan (misalnya, http://*:5000). Protokol (http:// atau https://) harus disertakan dengan setiap URL. Format yang didukung bervariasi di antara server.
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
Kestrel memiliki API konfigurasi endpoint-nya sendiri. Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk Kestrel server web.
Waktu matikan habis
Menentukan jumlah waktu untuk menunggu Web Host dimatikan.
Kunci : shutdownTimeoutSeconds
Jenis: int
Standar: 5 detik
Atur menggunakan: UseShutdownTimeout
Variabel lingkungan: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
Meskipun kunci menerima int dengan UseSetting (misalnya, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), metode ekstensi UseShutdownTimeout memerlukan TimeSpan parameter.
Selama periode batas waktu, Host Web:
- Pemicu ApplicationStopping.
- Mencoba menghentikan layanan yang dihosting, mencatat setiap kesalahan untuk layanan yang tidak dapat dihentikan.
Jika periode batas waktu berakhir sebelum semua layanan yang dihosting berhenti, layanan aktif yang tersisa berhenti saat aplikasi dimatikan. Layanan berhenti meskipun masih dalam proses. Jika layanan memerlukan lebih banyak waktu untuk berhenti, tingkatkan batas waktu.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
Perakitan startup
Menentukan perakitan untuk mencari kelas Startup.
Kunci : startupAssembly
Jenis: string
Default: Rakitan aplikasi.
Atur menggunakan: UseStartup
Variabel lingkungan: ASPNETCORE_STARTUPASSEMBLY
Anda dapat mereferensikan rakitan berdasarkan nama (string) atau jenis (TStartup). Jika beberapa UseStartup metode dipanggil, panggilan terakhir lebih diutamakan.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
Direktori root web
Mengatur jalur relatif ke aset statis aplikasi.
Kunci : webroot
Jenis: string
Default: wwwroot
Atur menggunakan: UseWebRoot
Variabel lingkungan: ASPNETCORE_WEBROOT
Jalur ke {content root}/wwwroot harus ada. Jika jalur tidak ada, penyedia file no-op akan digunakan.
WebHost.CreateDefaultBuilder(args)
.UseWebRoot("public")
Untuk informasi selengkapnya, lihat:
Mengganti konfigurasi Web Host
Gunakan konfigurasi aplikasi di ASP.NET Core untuk mengonfigurasi Web Host.
Dalam contoh berikut, konfigurasi host secara opsional ditentukan dalam file hostsettings.json . Argumen baris perintah dapat mengambil alih konfigurasi apa pun yang dimuat dari file hostsettings.json . Konfigurasi bawaan (dalam konfigurasi) digunakan untuk mengonfigurasi host dengan UseConfiguration metode .
IWebHostBuilder konfigurasi ditambahkan ke dalam konfigurasi aplikasi, tetapi hal sebaliknya tidak berlaku. Metode ConfigureAppConfiguration ini tidak memengaruhi IWebHostBuilder konfigurasi.
Menimpa konfigurasi yang disediakan oleh UseUrls dengan konfigurasi pada hostsettings.json, kemudian diikuti dengan konfigurasi argumen baris perintah:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
});
}
}
Isi file hostsettings.json:
{
urls: "http://*:5005"
}
Catatan
Metode ini UseConfiguration hanya menyalin kunci dari yang disediakan IConfiguration ke konfigurasi pembangun host. Oleh karena itu, mengatur reloadOnChange: true properti untuk file pengaturan JSON, INI, dan XML tidak berpengaruh.
Untuk menentukan host yang dijalankan pada URL tertentu, nilai yang diinginkan dapat diteruskan dari prompt perintah saat menjalankan dotnet run. Argumen baris perintah menimpa nilai urls dari file hostsettings.json, dan server mendengarkan pada port 8080.
dotnet run --urls "http://*:8080"
Mengelola Host Web
Untuk mengelola Web Host, Anda menggunakan metode berikut.
Run
Metode Run memulai aplikasi web dan memblokir utas panggilan hingga host dimatikan:
host.Run();
Start
Jalankan host dengan cara yang tidak memblokir dengan memanggil metodenya Start :
using (host)
{
host.Start();
Console.ReadLine();
}
Jika daftar URL diteruskan ke metode Start, metode tersebut akan mendengarkan pada URL yang ditentukan.
var urls = new List<string>()
{
"http://*:5000",
"http://localhost:5001"
};
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Start(urls.ToArray());
using (host)
{
Console.ReadLine();
}
Aplikasi ini dapat menginisialisasi dan memulai host baru dengan default yang sudah dikonfigurasi dari metode CreateDefaultBuilder menggunakan metode bantu statis. Metode ini memulai server tanpa output konsol dan menggunakan WaitForShutdown metode , yang menunggu jeda (Ctrl+C/SIGINT (Windows)/SIGINT (Windows), Ctrl+C (macOS), atau SIGTERM).
Start(RequestDelegate app)
Jalankan host dengan RequestDelegate:
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Buat permintaan HTTP di dalam browser ke URL http://localhost:5000 untuk menerima respons "Halo Dunia!" Metode WaitForShutdown akan tetap dalam keadaan blok hingga menerima perintah berhenti (Ctrl-C/SIGINT atau SIGTERM) dikeluarkan. Aplikasi menampilkan pesan Console.WriteLine dan menunggu penekanan tombol untuk keluar.
Mulai(url string, aplikasi RequestDelegate)
Jalankan host dengan URL dan RequestDelegate:
using (var host = WebHost.Start("http://localhost:8080", app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Menghasilkan hasil yang sama dengan Start(RequestDelegate app), kecuali aplikasi merespons pada http://localhost:8080 URL.
Start(Action<IRouteBuilder> routeBuilder)
Jalankan host dengan memulai dari instance IRouteBuilder (Microsoft.AspNetCore.Routing), yang menggunakan middleware perutean.
using (var host = WebHost.Start(router => router
.MapGet("hello/{name}", (req, res, data) =>
res.WriteAsync($"Hello, {data.Values["name"]}!"))
.MapGet("buenosdias/{name}", (req, res, data) =>
res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
.MapGet("throw/{message?}", (req, res, data) =>
throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
.MapGet("{greeting}/{name}", (req, res, data) =>
res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
.MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Gunakan permintaan browser berikut dengan contoh:
| Permintaan | Jawaban |
|---|---|
http://localhost:5000/hello/Martin |
Halo, Martin! |
http://localhost:5000/buenosdias/Catrina |
Buenos dias, Catrina! |
http://localhost:5000/throw/ooops! |
Melempar pengecualian dengan string "oops!" |
http://localhost:5000/throw |
Melempar pengecualian dengan string "Uh oh!" |
http://localhost:5000/Sante/Kevin |
Sante, Kevin! |
http://localhost:5000 |
Halo Dunia! |
Metode WaitForShutdown memblokir hingga jeda (Ctrl-C/SIGINT atau SIGTERM) dikeluarkan. Aplikasi menampilkan pesan Console.WriteLine dan menunggu penekanan tombol untuk keluar.
Start(string url, Action<IRouteBuilder> routeBuilder)
Jalankan host dengan memulai dengan URL dan instans IRouteBuilder:
using (var host = WebHost.Start("http://localhost:8080", router => router
.MapGet("hello/{name}", (req, res, data) =>
res.WriteAsync($"Hello, {data.Values["name"]}!"))
.MapGet("buenosdias/{name}", (req, res, data) =>
res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
.MapGet("throw/{message?}", (req, res, data) =>
throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
.MapGet("{greeting}/{name}", (req, res, data) =>
res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
.MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
Menghasilkan hasil yang sama dengan Start(Action<IRouteBuilder routeBuilder> ), kecuali aplikasi merespons pada http://localhost:8080 URL.
StartWith(Action<IApplicationBuilder> app)
Jalankan host dengan memulai dengan delegasi yang mengonfigurasi IApplicationBuilder:
using (var host = WebHost.StartWith(app =>
app.Use(next =>
{
return async context =>
{
await context.Response.WriteAsync("Hello World!");
};
})))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
Buat permintaan HTTP di dalam browser ke URL http://localhost:5000 untuk menerima respons "Halo Dunia!" Metode WaitForShutdown akan tetap dalam keadaan blok hingga menerima perintah berhenti (Ctrl-C/SIGINT atau SIGTERM) dikeluarkan. Aplikasi menampilkan pesan Console.WriteLine dan menunggu penekanan tombol untuk keluar.
StartWith(string url, Action<IApplicationBuilder> app)
Jalankan host dengan memulai dengan URL dan delegasi yang mengonfigurasi IApplicationBuilder:
using (var host = WebHost.StartWith("http://localhost:8080", app =>
app.Use(next =>
{
return async context =>
{
await context.Response.WriteAsync("Hello World!");
};
})))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
Menghasilkan hasil yang sama dengan StartWith(Action<IApplicationBuilder> app), kecuali aplikasi merespons di URL http://localhost:8080.
Menggunakan antarmuka IWebHostEnvironment
Antarmuka IWebHostEnvironment menyediakan informasi tentang lingkungan hosting web aplikasi. Gunakan injeksi konstruktor untuk mendapatkan instance IWebHostEnvironment, lalu akses properti dan metode ekstensinya.
public class CustomFileReader
{
private readonly IWebHostEnvironment _env;
public CustomFileReader(IWebHostEnvironment env)
{
_env = env;
}
public string ReadFile(string filePath)
{
var fileProvider = _env.WebRootFileProvider;
// Process the file here
}
}
Pendekatan berbasis konvensi dapat digunakan untuk mengonfigurasi aplikasi saat startup berdasarkan lingkungan. Atau, masukkan instans
public class Startup
{
public Startup(IWebHostEnvironment env)
{
HostingEnvironment = env;
}
public IWebHostEnvironment HostingEnvironment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
// Development configuration
}
else
{
// Staging/Production configuration
}
var contentRootPath = HostingEnvironment.ContentRootPath;
}
}
Catatan
Selain IsDevelopment metode ekstensi, IWebHostEnvironment menawarkan IsStagingmetode , IsProduction, dan IsEnvironment(string environmentName) . Untuk informasi selengkapnya, lihat lingkungan runtime ASP.NET Core.
Layanan ini IWebHostEnvironment juga bisa disuntikkan langsung ke Configure untuk menyiapkan metode alur pemrosesan:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// In Development, use the Developer Exception Page
app.UseDeveloperExceptionPage();
}
else
{
// In Staging/Production, route exceptions to /error
app.UseExceptionHandler("/error");
}
var contentRootPath = env.ContentRootPath;
}
IWebHostEnvironment dapat disuntikkan ke dalam metode Invoke saat membuat middleware kustom:
public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// Configure middleware for Development
}
else
{
// Configure middleware for Staging/Production
}
var contentRootPath = env.ContentRootPath;
}
Menggunakan antarmuka IHostApplicationLifetime
IHostApplicationLifetime memungkinkan aktivitas pasca-startup dan shutdown. Tiga properti pada antarmuka adalah token pembatalan yang digunakan untuk mendaftarkan Action metode yang menentukan peristiwa startup dan shutdown.
| Token pembatalan | Trigger |
|---|---|
ApplicationStarted |
Host sudah sepenuhnya dimulai. |
ApplicationStopped |
Host sedang menyelesaikan proses penghentian sistem secara halus. Semua permintaan diharapkan untuk diproses. Matikan blok hingga kejadian ini selesai. |
ApplicationStopping |
Host melakukan penutupan sistem secara bertahap. Permintaan mungkin masih dalam proses. Matikan blok hingga kejadian ini selesai. |
public class Startup
{
public void Configure(IApplicationBuilder app, IHostApplicationLifetime appLifetime)
{
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
Console.CancelKeyPress += (sender, eventArgs) =>
{
appLifetime.StopApplication();
// Don't terminate the process immediately, wait for the Main thread to exit gracefully.
eventArgs.Cancel = true;
};
}
private void OnStarted()
{
// Perform post-startup activities here
}
private void OnStopping()
{
// Perform on-stopping activities here
}
private void OnStopped()
{
// Perform post-stopped activities here
}
}
Metode StopApplication meminta penghentian aplikasi. Kelas berikut menggunakan StopApplication untuk mematikan aplikasi dengan anggun saat metode kelas Shutdown dipanggil:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Mengonfigurasi validasi cakupan
Metode CreateDefaultBuilder mengatur properti ValidateScopes menjadi true jika lingkungan aplikasi adalah Development.
Ketika ValidateScopes diatur ke true, penyedia layanan default melakukan pemeriksaan untuk memverifikasi:
- Layanan terlingkup tidak diselesaikan secara langsung atau tidak langsung dari penyedia layanan akar.
- Layanan terlingkup tidak secara langsung maupun tidak langsung disuntikkan ke dalam singleton.
Penyedia layanan akar dibuat ketika metode dipanggil BuildServiceProvider . Masa pakai penyedia layanan akar sesuai dengan masa pakai aplikasi/server saat penyedia mulai dengan aplikasi dan dibuang saat aplikasi dimatikan.
Kontainer yang membuat layanan tercakup juga membuang layanan. Jika layanan berlingkup dibuat dalam kontainer akar, masa pakai layanan secara efektif dipromosikan menjadi singleton. Kontainer akar membuang layanan hanya ketika aplikasi/server dimatikan. Memvalidasi cakupan layanan menangkap situasi ini ketika BuildServiceProvider dipanggil.
Untuk selalu memvalidasi cakupan, termasuk di Production lingkungan, konfigurasikan ServiceProviderOptions objek dengan UseDefaultServiceProvider metode pada pembuat host:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
Konten terkait
ASP.NET Core