ASP.NET Core Web Ana Bilgisayarı
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.
Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, web uygulamaları için önerilen bir WebApplicationBuilder ve WebApplicationoluşturur. ve WebApplication
hakkında WebApplicationBuilder
daha fazla bilgi için bkz. ASP.NET Core 5.0'dan 6.0'a geçirme
Konak ayarlama
örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle içindeki yöntemi Program.cs
olan uygulamanın giriş noktasında Main
gerçekleştirilir. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilder
Run
koddan ayıran adlı CreateWebHostBuilder
bir yöntemdedirMain
. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder
yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory
. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.
CreateDefaultBuilder
aşağıdaki görevleri gerçekleştirir:
- Uygulamanın barındırma yapılandırma sağlayıcılarını Kestrel kullanarak sunucuyu web sunucusu olarak yapılandırılır. Sunucunun Kestrel varsayılan seçenekleri için bkz . ASP.NET Core Kestrel web sunucusu için seçenekleri yapılandırma.
- İçerik kökünü tarafından Directory.GetCurrentDirectorydöndürülen yola ayarlar.
- Konak yapılandırmasını şu kaynaktan yükler:
- ön ekli
ASPNETCORE_
ortam değişkenleri (örneğin,ASPNETCORE_ENVIRONMENT
). - Komut satırı bağımsız değişkenleri.
- ön ekli
- Uygulama yapılandırmasını şu sırayla yükler:
appsettings.json
.appsettings.{Environment}.json
.- Uygulama giriş derlemesini kullanarak ortamda çalıştırıldığında
Development
kullanıcı gizli dizileri. - Ortam değişkenleri.
- Komut satırı bağımsız değişkenleri.
- Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının Günlük yapılandırması bölümünde
appsettings.json
belirtilen günlük filtreleme kurallarını içerir.appsettings.{Environment}.json
- ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken,
CreateDefaultBuilder
uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini etkinleştirir. IIS Tümleştirmesi, uygulamayı başlatma hatalarını yakalayacak şekilde de yapılandırıyor. IIS varsayılan seçenekleri için bkz . IIS ile Windows'ta Konak ASP.NET Çekirdeği. true
Uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder
tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:
ConfigureAppConfiguration , uygulama için ek
IConfiguration
belirtmek için kullanılır. AşağıdakiConfigureAppConfiguration
çağrı, dosyaya uygulama yapılandırmasınıappsettings.xml
eklemek için bir temsilci ekler.ConfigureAppConfiguration
birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true); }) ...
Aşağıdaki
ConfigureLogging
çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafındanCreateDefaultBuilder
yapılandırılan (LogLevel.Debug
) veappsettings.Production.json
(LogLevel.Error
) içindekiappsettings.Development.json
ayarları geçersiz kılar.ConfigureLogging
birden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...
Aşağıdaki çağrı
ConfigureKestrel
, tarafındanCreateDefaultBuilder
yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.
Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.
Not
Statik CreateDefaultBuilder
yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.
Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup
sınıf belirtilirse bir Configure
yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices
eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure
veya UseStartup
bu ayarlarda WebHostBuilder
birden çok çağrı.
Konak yapılandırma değerleri
WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:
- biçiminde
ASPNETCORE_{configurationKey}
ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin,ASPNETCORE_ENVIRONMENT
. - ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
- UseSetting ve ilişkili anahtarı seçin. ile
UseSetting
bir değer ayarlarken, değer türünden bağımsız olarak dize olarak ayarlanır.
Konak, en son değer ayarlayan seçeneği kullanır. Daha fazla bilgi için sonraki bölümde yapılandırmayı geçersiz kılma bölümüne bakın.
Uygulama Anahtarı (Ad)
ÖzellikIWebHostEnvironment.ApplicationName
, konak oluşturma sırasında çağrıldığında veya Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:
Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
Başlangıç Hatalarını Yakalama
Bu ayar başlangıç hatalarının yakalanmasını denetler.
Anahtar: captureStartupErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true
.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS
olduğunda false
, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true
, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
İçerik kökü
Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.
Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT
İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
Daha fazla bilgi için bkz.
Ayrıntılı Hatalar
Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.
Anahtar: detailedErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS
Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development
), uygulama ayrıntılı özel durumları yakalar.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Ortam
Uygulamanın ortamını ayarlar.
Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT
Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Staging
ve Production
değerlerini içerirDevelopment
. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT
okunur. Visual Studio kullanırken, dosyada launchSettings.json
ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
Barındırma Başlangıç Derlemeleri
Uygulamanın barındırma başlangıç derlemelerini ayarlar.
Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
HTTPS Bağlantı Noktası
HTTPS olmayan bir bağlantı alırsanız HTTPS bağlantı noktasını yeniden yönlendirilecek şekilde ayarlayın. HTTPS zorlamada kullanılır. Bu ayar sunucunun belirtilen bağlantı noktasını dinlemesine neden olmaz. Başka bir ifadeyle istekleri yanlışlıkla kullanılmayan bir bağlantı noktasına yönlendirebilirsiniz.
Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORT
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
HTTPS Bağlantı Noktaları
HTTPS bağlantılarını dinlemek için bağlantı noktalarını ayarlayın.
Anahtar: https_ports Türü: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_ports", "8080")
Barındırma Başlangıç Dışlama Derlemeleri
Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
Barındırma URL'lerini tercih et
Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder
yapılandırılan URL'leri dinlemesi IServer
gerekip gerekmediğini gösterir.
Anahtar: preferHostingUrls
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(true)
Barındırma Başlatmayı Engelle
Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.
Anahtar: preventHostingStartup
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
Sunucu URL'leri
Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.
Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS
Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123
. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000
) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http://
veya https://
) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.
Kapatma Zaman Aşımı
Web Konağı'nın kapatılmasını bekleme süresini belirtir.
Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")
), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting
alır.
Zaman aşımı süresi boyunca şunları barındırın:
- Tetikleyiciler IApplicationLifetime.ApplicationStopping.
- Durdurulmayan hizmetler için hataları günlüğe kaydederek barındırılan hizmetleri durdurmayı dener.
Barındırılan hizmetlerin tümü durdurulmadan zaman aşımı süresi dolarsa, uygulama kapatıldığında kalan tüm etkin hizmetler durdurulur. İşlemleri tamamlamamış olsalar bile hizmetler durduruluyor. Hizmetlerin durdurulması için ek süre gerekiyorsa zaman aşımını artırın.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
Başlangıç Derlemesi
sınıfını aramak için derlemeyi Startup
belirler.
Anahtar: startupAssembly
Tür: dize
Varsayılan: Uygulamanın derlemesi
Şu şekilde ayarlayın: UseStartup
Ortam değişkeni: ASPNETCORE_STARTUPASSEMBLY
Ada (string
) veya türe (TStartup
) göre derlemeye başvurulabilir. Birden çok UseStartup
yöntem çağrılırsa, sonuncusu öncelikli olur.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
Web kökü
Uygulamanın statik varlıklarının göreli yolunu ayarlar.
Anahtar: webroot
Tür: dize
Varsayılan: Varsayılan değerdir wwwroot
. {content root}/wwwroot yolunun mevcut olması gerekir. Yol yoksa, işlem yapılmayan bir dosya sağlayıcısı kullanılır.
Şu şekilde ayarlayın: UseWebRoot
Ortam değişkeni: ASPNETCORE_WEBROOT
WebHost.CreateDefaultBuilder(args)
.UseWebRoot("public")
Daha fazla bilgi için bkz.
Yapılandırmayı geçersiz kıl
Web Konağını yapılandırmak için Yapılandırma'ya tıklayın. Aşağıdaki örnekte, konak yapılandırması isteğe bağlı olarak bir hostsettings.json
dosyada belirtilir. Dosyadan hostsettings.json
yüklenen tüm yapılandırmalar komut satırı bağımsız değişkenleri tarafından geçersiz kılınabilir. Yerleşik yapılandırma (içinde config
) ile UseConfigurationkonağı yapılandırmak için kullanılır. IWebHostBuilder
yapılandırması uygulamanın yapılandırmasına eklenir, ancak tersi doğru değildir;ConfigureAppConfiguration
yapılandırmayı IWebHostBuilder
etkilemez.
tarafından sağlanan UseUrls
yapılandırmayı önce yapılandırmayla hostsettings.json
geçersiz kılma, komut satırı bağımsız değişkeni yapılandırma saniyesi:
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!"));
});
}
}
hostsettings.json
:
{
urls: "http://*:5005"
}
Not
UseConfiguration anahtarları yalnızca sağlanandan IConfiguration
konak oluşturucu yapılandırmasına kopyalar. Bu nedenle JSON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: true
hiçbir etkisi yoktur.
Belirli bir URL'de konak çalıştırmasını belirtmek için, dotnet çalıştırması yürütülürken komut isteminden istenen değer geçirilebilir. Komut satırı bağımsız değişkeni, dosyadaki urls
hostsettings.json
değeri geçersiz kılar ve sunucu 8080 numaralı bağlantı noktasını dinler:
dotnet run --urls "http://*:8080"
Konağı yönetme
Çalıştır
Run
yöntemi web uygulamasını başlatır ve konak kapatana kadar çağıran iş parçacığını engeller:
host.Run();
Başlangıç
Yöntemini çağırarak Start
konağı engelleyici olmayan bir şekilde çalıştırın:
using (host)
{
host.Start();
Console.ReadLine();
}
Yöntemine Start
bir URL listesi geçirilirse, belirtilen URL'leri dinler:
var urls = new List<string>()
{
"http://*:5000",
"http://localhost:5001"
};
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Start(urls.ToArray());
using (host)
{
Console.ReadLine();
}
Uygulama, statik bir kolaylık yöntemi kullanarak önceden yapılandırılmış varsayılanlarını CreateDefaultBuilder
kullanarak yeni bir konak başlatabilir ve başlatabilir. Bu yöntemler sunucuyu konsol çıkışı olmadan başlatır ve WaitForShutdown kesmeyi bekler (Ctrl-C/SIGINT veya SIGTERM):
Start(RequestDelegate uygulaması)
ile RequestDelegate
başlayın:
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, RequestDelegate uygulaması)
URL ile başlayın ve 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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder
kullanın:
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();
}
Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:
İste | Response |
---|---|
http://localhost:5000/hello/Martin |
Merhaba Martin! |
http://localhost:5000/buenosdias/Catrina |
Buenos dias, Catrina! |
http://localhost:5000/throw/ooops! |
"ooops!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/throw |
"Uh oh!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/Sante/Kevin |
Sante, Kevin! |
http://localhost:5000 |
Merhaba Dünya! |
WaitForShutdown
bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)
URL'yi ve örneğini IRouteBuilder
kullanın:
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();
}
Uygulamanın konumunda http://localhost:8080
yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuilder
temsilci sağlayın:
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();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
StartWith(dize url'si, Action<IApplicationBuilder> uygulaması)
yapılandırmak IApplicationBuilder
için bir URL ve temsilci sağlayın:
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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.
IWebHostEnvironment arabirimi
Arabirim, IWebHostEnvironment
uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment
etmek için oluşturucu eklemesini kullanın:
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
}
}
Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup
öğesini de ConfigureServices
eklersinizIWebHostEnvironment
:
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;
}
}
Not
Uzantı yöntemine IsDevelopment
ek olarak , IWebHostEnvironment
IsProduction
ve IsEnvironment(string environmentName)
yöntemlerini de sunarIsStaging
. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
Hizmet, IWebHostEnvironment
işleme işlem hattını ayarlamak için doğrudan Configure
yöntemine de eklenebilir:
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
özel ara yazılım oluşturulurken yöntemine Invoke
eklenebilir:
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;
}
IHostApplicationLifetime arabirimi
IHostApplicationLifetime
başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action
için kullanılan iptal belirteçleridir.
İptal Belirteci | Tetiklendiğinde... |
---|---|
ApplicationStarted |
Ana bilgisayar tamamen başlatıldı. |
ApplicationStopped |
Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları. |
ApplicationStopping |
Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları. |
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
}
}
StopApplication
uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown
bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication
:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuildertrue
, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.
ValidateScopes
olarak ayarlandığındatrue
, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:
- Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
- Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.
Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.
Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider
bu durumları yakalar.
Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
Ek kaynaklar
ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.
Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, tüm uygulama türleri için önerilen bir .NET Genel Ana Bilgisayarı oluşturur.
Konak ayarlama
örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle uygulamanın giriş noktası olan yönteminde Main
gerçekleştirilir.
Proje şablonlarında içinde Main
bulunur Program.cs
. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilder
Run
koddan ayıran adlı CreateWebHostBuilder
bir yöntemdedirMain
. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder
yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory
. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.
CreateDefaultBuilder
aşağıdaki görevleri gerçekleştirir:
- Uygulamanın barındırma yapılandırma sağlayıcılarını Kestrel kullanarak sunucuyu web sunucusu olarak yapılandırılır. Sunucunun Kestrel varsayılan seçenekleri için bkz . ASP.NET Core Kestrel web sunucusu için seçenekleri yapılandırma.
- İçerik kökünü tarafından Directory.GetCurrentDirectorydöndürülen yola ayarlar.
- Konak yapılandırmasını şu kaynaktan yükler:
- ön ekli
ASPNETCORE_
ortam değişkenleri (örneğin,ASPNETCORE_ENVIRONMENT
). - Komut satırı bağımsız değişkenleri.
- ön ekli
- Uygulama yapılandırmasını şu sırayla yükler:
appsettings.json
.appsettings.{Environment}.json
.- Uygulama giriş derlemesini kullanarak ortamda çalıştırıldığında
Development
kullanıcı gizli dizileri. - Ortam değişkenleri.
- Komut satırı bağımsız değişkenleri.
- Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının Günlük yapılandırması bölümünde
appsettings.json
belirtilen günlük filtreleme kurallarını içerir.appsettings.{Environment}.json
- ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken,
CreateDefaultBuilder
uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini etkinleştirir. IIS Tümleştirmesi, uygulamayı başlatma hatalarını yakalayacak şekilde de yapılandırıyor. IIS varsayılan seçenekleri için bkz . IIS ile Windows'ta Konak ASP.NET Çekirdeği. true
Uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder
tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:
ConfigureAppConfiguration , uygulama için ek
IConfiguration
belirtmek için kullanılır. AşağıdakiConfigureAppConfiguration
çağrı, dosyaya uygulama yapılandırmasınıappsettings.xml
eklemek için bir temsilci ekler.ConfigureAppConfiguration
birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true); }) ...
Aşağıdaki
ConfigureLogging
çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafındanCreateDefaultBuilder
yapılandırılan (LogLevel.Debug
) veappsettings.Production.json
(LogLevel.Error
) içindekiappsettings.Development.json
ayarları geçersiz kılar.ConfigureLogging
birden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...
Aşağıdaki çağrı
ConfigureKestrel
, tarafındanCreateDefaultBuilder
yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.
Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.
Not
Statik CreateDefaultBuilder
yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.
Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup
sınıf belirtilirse bir Configure
yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices
eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure
veya UseStartup
bu ayarlarda WebHostBuilder
birden çok çağrı.
Konak yapılandırma değerleri
WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:
- biçiminde
ASPNETCORE_{configurationKey}
ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin,ASPNETCORE_ENVIRONMENT
. - ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
- UseSetting ve ilişkili anahtarı seçin. ile
UseSetting
bir değer ayarlarken, değer türünden bağımsız olarak dize olarak ayarlanır.
Konak, en son değer ayarlayan seçeneği kullanır. Daha fazla bilgi için sonraki bölümde yapılandırmayı geçersiz kılma bölümüne bakın.
Uygulama Anahtarı (Ad)
ÖzellikIWebHostEnvironment.ApplicationName
, konak oluşturma sırasında çağrıldığında veya Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:
Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
Başlangıç Hatalarını Yakalama
Bu ayar başlangıç hatalarının yakalanmasını denetler.
Anahtar: captureStartupErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true
.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS
olduğunda false
, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true
, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
İçerik kökü
Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.
Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT
İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
Daha fazla bilgi için bkz.
Ayrıntılı Hatalar
Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.
Anahtar: detailedErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS
Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development
), uygulama ayrıntılı özel durumları yakalar.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Ortam
Uygulamanın ortamını ayarlar.
Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT
Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Staging
ve Production
değerlerini içerirDevelopment
. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT
okunur. Visual Studio kullanırken, dosyada launchSettings.json
ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
Barındırma Başlangıç Derlemeleri
Uygulamanın barındırma başlangıç derlemelerini ayarlar.
Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
HTTPS Bağlantı Noktası
HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS zorlamada kullanılır.
Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
Barındırma Başlangıç Dışlama Derlemeleri
Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
Barındırma URL'lerini tercih et
Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder
yapılandırılan URL'leri dinlemesi IServer
gerekip gerekmediğini gösterir.
Anahtar: preferHostingUrls
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(true)
Barındırma Başlatmayı Engelle
Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.
Anahtar: preventHostingStartup
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
Sunucu URL'leri
Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.
Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS
Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123
. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000
) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http://
veya https://
) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.
Kapatma Zaman Aşımı
Web Konağı'nın kapatılmasını bekleme süresini belirtir.
Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")
), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting
alır.
Zaman aşımı süresi boyunca şunları barındırın:
- Tetikleyiciler IApplicationLifetime.ApplicationStopping.
- Durdurulmayan hizmetler için hataları günlüğe kaydederek barındırılan hizmetleri durdurmayı dener.
Barındırılan hizmetlerin tümü durdurulmadan zaman aşımı süresi dolarsa, uygulama kapatıldığında kalan tüm etkin hizmetler durdurulur. İşlemleri tamamlamamış olsalar bile hizmetler durduruluyor. Hizmetlerin durdurulması için ek süre gerekiyorsa zaman aşımını artırın.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
Başlangıç Derlemesi
sınıfını aramak için derlemeyi Startup
belirler.
Anahtar: startupAssembly
Tür: dize
Varsayılan: Uygulamanın derlemesi
Şu şekilde ayarlayın: UseStartup
Ortam değişkeni: ASPNETCORE_STARTUPASSEMBLY
Ada (string
) veya türe (TStartup
) göre derlemeye başvurulabilir. Birden çok UseStartup
yöntem çağrılırsa, sonuncusu öncelikli olur.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
Web kökü
Uygulamanın statik varlıklarının göreli yolunu ayarlar.
Anahtar: webroot
Tür: dize
Varsayılan: Varsayılan değerdir wwwroot
. {content root}/wwwroot yolunun mevcut olması gerekir. Yol yoksa, işlem yapılmayan bir dosya sağlayıcısı kullanılır.
Şu şekilde ayarlayın: UseWebRoot
Ortam değişkeni: ASPNETCORE_WEBROOT
WebHost.CreateDefaultBuilder(args)
.UseWebRoot("public")
Daha fazla bilgi için bkz.
Yapılandırmayı geçersiz kıl
Web Konağını yapılandırmak için Yapılandırma'ya tıklayın. Aşağıdaki örnekte, konak yapılandırması isteğe bağlı olarak bir hostsettings.json
dosyada belirtilir. Dosyadan hostsettings.json
yüklenen tüm yapılandırmalar komut satırı bağımsız değişkenleri tarafından geçersiz kılınabilir. Yerleşik yapılandırma (içinde config
) ile UseConfigurationkonağı yapılandırmak için kullanılır. IWebHostBuilder
yapılandırması uygulamanın yapılandırmasına eklenir, ancak tersi doğru değildir;ConfigureAppConfiguration
yapılandırmayı IWebHostBuilder
etkilemez.
tarafından sağlanan UseUrls
yapılandırmayı önce yapılandırmayla hostsettings.json
geçersiz kılma, komut satırı bağımsız değişkeni yapılandırma saniyesi:
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!"));
});
}
}
hostsettings.json
:
{
urls: "http://*:5005"
}
Not
UseConfiguration anahtarları yalnızca sağlanandan IConfiguration
konak oluşturucu yapılandırmasına kopyalar. Bu nedenle JSON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: true
hiçbir etkisi yoktur.
Belirli bir URL'de konak çalıştırmasını belirtmek için, dotnet çalıştırması yürütülürken komut isteminden istenen değer geçirilebilir. Komut satırı bağımsız değişkeni, dosyadaki urls
hostsettings.json
değeri geçersiz kılar ve sunucu 8080 numaralı bağlantı noktasını dinler:
dotnet run --urls "http://*:8080"
Konağı yönetme
Çalıştır
Run
yöntemi web uygulamasını başlatır ve konak kapatana kadar çağıran iş parçacığını engeller:
host.Run();
Başlangıç
Yöntemini çağırarak Start
konağı engelleyici olmayan bir şekilde çalıştırın:
using (host)
{
host.Start();
Console.ReadLine();
}
Yöntemine Start
bir URL listesi geçirilirse, belirtilen URL'leri dinler:
var urls = new List<string>()
{
"http://*:5000",
"http://localhost:5001"
};
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Start(urls.ToArray());
using (host)
{
Console.ReadLine();
}
Uygulama, statik bir kolaylık yöntemi kullanarak önceden yapılandırılmış varsayılanlarını CreateDefaultBuilder
kullanarak yeni bir konak başlatabilir ve başlatabilir. Bu yöntemler sunucuyu konsol çıkışı olmadan başlatır ve WaitForShutdown kesmeyi bekler (Ctrl-C/SIGINT veya SIGTERM):
Start(RequestDelegate uygulaması)
ile RequestDelegate
başlayın:
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, RequestDelegate uygulaması)
URL ile başlayın ve 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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder
kullanın:
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();
}
Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:
İste | Response |
---|---|
http://localhost:5000/hello/Martin |
Merhaba Martin! |
http://localhost:5000/buenosdias/Catrina |
Buenos dias, Catrina! |
http://localhost:5000/throw/ooops! |
"ooops!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/throw |
"Uh oh!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/Sante/Kevin |
Sante, Kevin! |
http://localhost:5000 |
Merhaba Dünya! |
WaitForShutdown
bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)
URL'yi ve örneğini IRouteBuilder
kullanın:
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();
}
Uygulamanın konumunda http://localhost:8080
yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuilder
temsilci sağlayın:
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();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
StartWith(dize url'si, Action<IApplicationBuilder> uygulaması)
yapılandırmak IApplicationBuilder
için bir URL ve temsilci sağlayın:
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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.
IWebHostEnvironment arabirimi
Arabirim, IWebHostEnvironment
uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment
etmek için oluşturucu eklemesini kullanın:
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
}
}
Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup
öğesini de ConfigureServices
eklersinizIWebHostEnvironment
:
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;
}
}
Not
Uzantı yöntemine IsDevelopment
ek olarak , IWebHostEnvironment
IsProduction
ve IsEnvironment(string environmentName)
yöntemlerini de sunarIsStaging
. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
Hizmet, IWebHostEnvironment
işleme işlem hattını ayarlamak için doğrudan Configure
yöntemine de eklenebilir:
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
özel ara yazılım oluşturulurken yöntemine Invoke
eklenebilir:
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;
}
IHostApplicationLifetime arabirimi
IHostApplicationLifetime
başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action
için kullanılan iptal belirteçleridir.
İptal Belirteci | Tetiklendiğinde... |
---|---|
ApplicationStarted |
Ana bilgisayar tamamen başlatıldı. |
ApplicationStopped |
Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları. |
ApplicationStopping |
Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları. |
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
}
}
StopApplication
uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown
bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication
:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuildertrue
, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.
ValidateScopes
olarak ayarlandığındatrue
, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:
- Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
- Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.
Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.
Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider
bu durumları yakalar.
Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
Ek kaynaklar
ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.
Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, tüm uygulama türleri için önerilen bir .NET Genel Ana Bilgisayarı oluşturur.
Konak ayarlama
örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle uygulamanın giriş noktası olan yönteminde Main
gerçekleştirilir.
Proje şablonlarında içinde Main
bulunur Program.cs
. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilder
Run
koddan ayıran adlı CreateWebHostBuilder
bir yöntemdedirMain
. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder
yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory
. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.
CreateDefaultBuilder
aşağıdaki görevleri gerçekleştirir:
- Uygulamanın barındırma yapılandırma sağlayıcılarını Kestrel kullanarak sunucuyu web sunucusu olarak yapılandırılır. Sunucunun Kestrel varsayılan seçenekleri için bkz Kestrel . ASP.NET Core'da web sunucusu.
- İçerik kökünü tarafından Directory.GetCurrentDirectorydöndürülen yola ayarlar.
- Konak yapılandırmasını şu kaynaktan yükler:
- ön ekli
ASPNETCORE_
ortam değişkenleri (örneğin,ASPNETCORE_ENVIRONMENT
). - Komut satırı bağımsız değişkenleri.
- ön ekli
- Uygulama yapılandırmasını şu sırayla yükler:
appsettings.json
.appsettings.{Environment}.json
.- Uygulama giriş derlemesini kullanarak ortamda çalıştırıldığında
Development
kullanıcı gizli dizileri. - Ortam değişkenleri.
- Komut satırı bağımsız değişkenleri.
- Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının Günlük yapılandırması bölümünde
appsettings.json
belirtilen günlük filtreleme kurallarını içerir.appsettings.{Environment}.json
- ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken,
CreateDefaultBuilder
uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini etkinleştirir. IIS Tümleştirmesi, uygulamayı başlatma hatalarını yakalayacak şekilde de yapılandırıyor. IIS varsayılan seçenekleri için bkz . IIS ile Windows'ta Konak ASP.NET Çekirdeği. true
Uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder
tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:
ConfigureAppConfiguration , uygulama için ek
IConfiguration
belirtmek için kullanılır. AşağıdakiConfigureAppConfiguration
çağrı, dosyaya uygulama yapılandırmasınıappsettings.xml
eklemek için bir temsilci ekler.ConfigureAppConfiguration
birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true); }) ...
Aşağıdaki
ConfigureLogging
çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafındanCreateDefaultBuilder
yapılandırılan (LogLevel.Debug
) veappsettings.Production.json
(LogLevel.Error
) içindekiappsettings.Development.json
ayarları geçersiz kılar.ConfigureLogging
birden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...
Aşağıdaki çağrı
ConfigureKestrel
, tarafındanCreateDefaultBuilder
yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.
Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.
Not
Statik CreateDefaultBuilder
yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.
Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup
sınıf belirtilirse bir Configure
yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices
eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure
veya UseStartup
bu ayarlarda WebHostBuilder
birden çok çağrı.
Konak yapılandırma değerleri
WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:
- biçiminde
ASPNETCORE_{configurationKey}
ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin,ASPNETCORE_ENVIRONMENT
. - ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
- UseSetting ve ilişkili anahtarı seçin. ile
UseSetting
bir değer ayarlarken, değer türünden bağımsız olarak dize olarak ayarlanır.
Konak, en son değer ayarlayan seçeneği kullanır. Daha fazla bilgi için sonraki bölümde yapılandırmayı geçersiz kılma bölümüne bakın.
Uygulama Anahtarı (Ad)
ÖzellikIWebHostEnvironment.ApplicationName
, konak oluşturma sırasında çağrıldığında veya Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:
Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
Başlangıç Hatalarını Yakalama
Bu ayar başlangıç hatalarının yakalanmasını denetler.
Anahtar: captureStartupErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true
.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS
olduğunda false
, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true
, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
İçerik kökü
Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.
Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT
İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
Daha fazla bilgi için bkz.
Ayrıntılı Hatalar
Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.
Anahtar: detailedErrors
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS
Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development
), uygulama ayrıntılı özel durumları yakalar.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Ortam
Uygulamanın ortamını ayarlar.
Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT
Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Staging
ve Production
değerlerini içerirDevelopment
. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT
okunur. Visual Studio kullanırken, dosyada launchSettings.json
ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
Barındırma Başlangıç Derlemeleri
Uygulamanın barındırma başlangıç derlemelerini ayarlar.
Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
HTTPS Bağlantı Noktası
HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS zorlamada kullanılır.
Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
Barındırma Başlangıç Dışlama Derlemeleri
Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.
Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
Barındırma URL'lerini tercih et
Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder
yapılandırılan URL'leri dinlemesi IServer
gerekip gerekmediğini gösterir.
Anahtar: preferHostingUrls
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(true)
Barındırma Başlatmayı Engelle
Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.
Anahtar: preventHostingStartup
Tür: bool (true
veya 1
)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
Sunucu URL'leri
Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.
Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS
Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123
. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000
) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http://
veya https://
) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz Kestrel . ASP.NET Core'da web sunucusu.
Kapatma Zaman Aşımı
Web Konağı'nın kapatılmasını bekleme süresini belirtir.
Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")
), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting
alır.
Zaman aşımı süresi boyunca şunları barındırın:
- Tetikleyiciler IApplicationLifetime.ApplicationStopping.
- Durdurulmayan hizmetler için hataları günlüğe kaydederek barındırılan hizmetleri durdurmayı dener.
Barındırılan hizmetlerin tümü durdurulmadan zaman aşımı süresi dolarsa, uygulama kapatıldığında kalan tüm etkin hizmetler durdurulur. İşlemleri tamamlamamış olsalar bile hizmetler durduruluyor. Hizmetlerin durdurulması için ek süre gerekiyorsa zaman aşımını artırın.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
Başlangıç Derlemesi
sınıfını aramak için derlemeyi Startup
belirler.
Anahtar: startupAssembly
Tür: dize
Varsayılan: Uygulamanın derlemesi
Şu şekilde ayarlayın: UseStartup
Ortam değişkeni: ASPNETCORE_STARTUPASSEMBLY
Ada (string
) veya türe (TStartup
) göre derlemeye başvurulabilir. Birden çok UseStartup
yöntem çağrılırsa, sonuncusu öncelikli olur.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
Web kökü
Uygulamanın statik varlıklarının göreli yolunu ayarlar.
Anahtar: webroot
Tür: dize
Varsayılan: Varsayılan değerdir wwwroot
. {content root}/wwwroot yolunun mevcut olması gerekir. Yol yoksa, işlem yapılmayan bir dosya sağlayıcısı kullanılır.
Şu şekilde ayarlayın: UseWebRoot
Ortam değişkeni: ASPNETCORE_WEBROOT
WebHost.CreateDefaultBuilder(args)
.UseWebRoot("public")
Daha fazla bilgi için bkz.
Yapılandırmayı geçersiz kıl
Web Konağını yapılandırmak için Yapılandırma'ya tıklayın. Aşağıdaki örnekte, konak yapılandırması isteğe bağlı olarak bir hostsettings.json
dosyada belirtilir. Dosyadan hostsettings.json
yüklenen tüm yapılandırmalar komut satırı bağımsız değişkenleri tarafından geçersiz kılınabilir. Yerleşik yapılandırma (içinde config
) ile UseConfigurationkonağı yapılandırmak için kullanılır. IWebHostBuilder
yapılandırması uygulamanın yapılandırmasına eklenir, ancak tersi doğru değildir;ConfigureAppConfiguration
yapılandırmayı IWebHostBuilder
etkilemez.
tarafından sağlanan UseUrls
yapılandırmayı önce yapılandırmayla hostsettings.json
geçersiz kılma, komut satırı bağımsız değişkeni yapılandırma saniyesi:
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!"));
});
}
}
hostsettings.json
:
{
urls: "http://*:5005"
}
Not
UseConfiguration anahtarları yalnızca sağlanandan IConfiguration
konak oluşturucu yapılandırmasına kopyalar. Bu nedenle JSON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: true
hiçbir etkisi yoktur.
Belirli bir URL'de konak çalıştırmasını belirtmek için, dotnet çalıştırması yürütülürken komut isteminden istenen değer geçirilebilir. Komut satırı bağımsız değişkeni, dosyadaki urls
hostsettings.json
değeri geçersiz kılar ve sunucu 8080 numaralı bağlantı noktasını dinler:
dotnet run --urls "http://*:8080"
Konağı yönetme
Çalıştır
Run
yöntemi web uygulamasını başlatır ve konak kapatana kadar çağıran iş parçacığını engeller:
host.Run();
Başlangıç
Yöntemini çağırarak Start
konağı engelleyici olmayan bir şekilde çalıştırın:
using (host)
{
host.Start();
Console.ReadLine();
}
Yöntemine Start
bir URL listesi geçirilirse, belirtilen URL'leri dinler:
var urls = new List<string>()
{
"http://*:5000",
"http://localhost:5001"
};
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Start(urls.ToArray());
using (host)
{
Console.ReadLine();
}
Uygulama, statik bir kolaylık yöntemi kullanarak önceden yapılandırılmış varsayılanlarını CreateDefaultBuilder
kullanarak yeni bir konak başlatabilir ve başlatabilir. Bu yöntemler sunucuyu konsol çıkışı olmadan başlatır ve WaitForShutdown kesmeyi bekler (Ctrl-C/SIGINT veya SIGTERM):
Start(RequestDelegate uygulaması)
ile RequestDelegate
başlayın:
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, RequestDelegate uygulaması)
URL ile başlayın ve 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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder
kullanın:
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();
}
Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:
İste | Response |
---|---|
http://localhost:5000/hello/Martin |
Merhaba Martin! |
http://localhost:5000/buenosdias/Catrina |
Buenos dias, Catrina! |
http://localhost:5000/throw/ooops! |
"ooops!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/throw |
"Uh oh!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/Sante/Kevin |
Sante, Kevin! |
http://localhost:5000 |
Merhaba Dünya! |
WaitForShutdown
bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)
URL'yi ve örneğini IRouteBuilder
kullanın:
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();
}
Uygulamanın konumunda http://localhost:8080
yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuilder
temsilci sağlayın:
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();
}
Bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar tarayıcıda http://localhost:5000
"Merhaba Dünya!" WaitForShutdown
blokları yanıtını almak için bir istekte bulunabilirsiniz. Uygulama iletiyi görüntüler Console.WriteLine
ve bir tuş basmasının çıkmasını bekler.
StartWith(dize url'si, Action<IApplicationBuilder> uygulaması)
yapılandırmak IApplicationBuilder
için bir URL ve temsilci sağlayın:
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();
}
Uygulamanın üzerinde http://localhost:8080
yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.
IWebHostEnvironment arabirimi
Arabirim, IWebHostEnvironment
uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment
etmek için oluşturucu eklemesini kullanın:
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
}
}
Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup
öğesini de ConfigureServices
eklersinizIWebHostEnvironment
:
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;
}
}
Not
Uzantı yöntemine IsDevelopment
ek olarak , IWebHostEnvironment
IsProduction
ve IsEnvironment(string environmentName)
yöntemlerini de sunarIsStaging
. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.
Hizmet, IWebHostEnvironment
işleme işlem hattını ayarlamak için doğrudan Configure
yöntemine de eklenebilir:
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
özel ara yazılım oluşturulurken yöntemine Invoke
eklenebilir:
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;
}
IHostApplicationLifetime arabirimi
IHostApplicationLifetime
başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action
için kullanılan iptal belirteçleridir.
İptal Belirteci | Tetiklendiğinde... |
---|---|
ApplicationStarted |
Ana bilgisayar tamamen başlatıldı. |
ApplicationStopped |
Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları. |
ApplicationStopping |
Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları. |
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
}
}
StopApplication
uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown
bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication
:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuildertrue
, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.
ValidateScopes
olarak ayarlandığındatrue
, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:
- Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
- Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.
Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.
Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider
bu durumları yakalar.
Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
Ek kaynaklar
ASP.NET Core