Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
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 9 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.
WebApplicationBuilder ve WebApplication hakkında daha fazla bilgi için .NET 5'te ASP.NET Core'dan .NET 6'ya geçiş bölümüne bakın.
Konak ayarlama
örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle içindeki yöntemi Mainolan uygulamanın giriş noktasında Program.cs 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 CreateDefaultBuilderCreateWebHostBuilder koddan ayıran adlı Mainbir yöntemdedirRun. 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:
-
Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının.
appsettings.json - ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken, uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini
CreateDefaultBuilder. 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. -
ServiceProviderOptions.ValidateScopes Uygulamanın ortamının Geliştirme olup olmadığını ayarlar
true. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureAppConfigurationgeçersiz kılınabilir ve artırılabilir ConfigureLoggingve 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
IConfigurationbelirtmek için kullanılır. AşağıdakiConfigureAppConfigurationçağrı, dosyaya uygulama yapılandırmasınıappsettings.xmleklemek için bir temsilci ekler.ConfigureAppConfigurationbirden ç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ındanappsettings.Development.jsonyapılandırılan (LogLevel.Debug) veappsettings.Production.json(LogLevel.Error) içindekiCreateDefaultBuilderayarları geçersiz kılar.ConfigureLoggingbirden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...Aşağıdaki çağrı
ConfigureKestrel, tarafından yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılanCreateDefaultBuilderdeğ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 UseContentRoot gibi UseConfiguration uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
-
UseSetting ve ilişkili anahtarı seçin. ile
UseSettingbir 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 UseStartup çağrıldığında Configure 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 , Developmentve Stagingdeğerlerini içerirProduction. 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 çalışma zamanı ortamları.
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")
HTTP Bağlantı Noktaları
HTTP bağlantılarını dinlemek için bağlantı noktalarını ayarlayın.
Anahtar: http_ports Türü: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTP_PORTS
WebHost.CreateDefaultBuilder(args)
.UseSetting("http_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), .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10") uzantı yöntemi bir UseShutdownTimeoutTimeSpan 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 urlshostsettings.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 RequestDelegatebaş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 yanıt vermesi dışında Start(RequestDelegate uygulaması)http://localhost:8080verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (IRouteBuilder) örneği 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 | Yanıt |
|---|---|
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 IRouteBuilderkullanı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 <yanıt vermesi dışında Start(Action>IRouteBuilder routeBuilder)http://localhost:8080verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuildertemsilci 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 IApplicationBuilderiç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 <yanıt vermesi dışında StartWith(Action>IApplicationBuilder uygulaması)http://localhost:8080verir.
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 etmek için oluşturucu eklemesiniIWebHostEnvironment:
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 IWebHostEnvironment öğesini de StartupeklersinizConfigureServices:
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 , IWebHostEnvironmentIsStagingve IsProduction yöntemlerini de sunarIsEnvironment(string environmentName). Daha fazla bilgi için bkz. ASP.NET Core çalışma zamanı ortamları.
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 Invoke oluşturulurken yöntemine 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 StopApplication bir uygulamayı düzgün bir şekilde kapatmak için kullanırShutdown:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuilder
ServiceProviderOptions.ValidateScopes, uygulamanın ortamının Geliştirme olup olmadığını ayarlartrue.
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 ServiceProviderOptions yapılandırınUseDefaultServiceProvider:
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 CreateDefaultBuilderCreateWebHostBuilder koddan ayıran adlı Mainbir yöntemdedirRun. 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:
-
Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının.
appsettings.json - ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken, uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini
CreateDefaultBuilder. 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. -
ServiceProviderOptions.ValidateScopes Uygulamanın ortamının Geliştirme olup olmadığını ayarlar
true. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureAppConfigurationgeçersiz kılınabilir ve artırılabilir ConfigureLoggingve 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
IConfigurationbelirtmek için kullanılır. AşağıdakiConfigureAppConfigurationçağrı, dosyaya uygulama yapılandırmasınıappsettings.xmleklemek için bir temsilci ekler.ConfigureAppConfigurationbirden ç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ındanappsettings.Development.jsonyapılandırılan (LogLevel.Debug) veappsettings.Production.json(LogLevel.Error) içindekiCreateDefaultBuilderayarları geçersiz kılar.ConfigureLoggingbirden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...Aşağıdaki çağrı
ConfigureKestrel, tarafından yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılanCreateDefaultBuilderdeğ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 UseContentRoot gibi UseConfiguration uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
-
UseSetting ve ilişkili anahtarı seçin. ile
UseSettingbir 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 UseStartup çağrıldığında Configure 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 , Developmentve Stagingdeğerlerini içerirProduction. 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 çalışma zamanı ortamları.
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), .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10") uzantı yöntemi bir UseShutdownTimeoutTimeSpan 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 urlshostsettings.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 RequestDelegatebaş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 yanıt vermesi dışında Start(RequestDelegate uygulaması)http://localhost:8080verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (IRouteBuilder) örneği 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 | Yanıt |
|---|---|
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 IRouteBuilderkullanı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 <yanıt vermesi dışında Start(Action>IRouteBuilder routeBuilder)http://localhost:8080verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuildertemsilci 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 IApplicationBuilderiç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 <yanıt vermesi dışında StartWith(Action>IApplicationBuilder uygulaması)http://localhost:8080verir.
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 etmek için oluşturucu eklemesiniIWebHostEnvironment:
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 IWebHostEnvironment öğesini de StartupeklersinizConfigureServices:
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 , IWebHostEnvironmentIsStagingve IsProduction yöntemlerini de sunarIsEnvironment(string environmentName). Daha fazla bilgi için bkz. ASP.NET Core çalışma zamanı ortamları.
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 Invoke oluşturulurken yöntemine 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 StopApplication bir uygulamayı düzgün bir şekilde kapatmak için kullanırShutdown:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuilder
ServiceProviderOptions.ValidateScopes, uygulamanın ortamının Geliştirme olup olmadığını ayarlartrue.
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 ServiceProviderOptions yapılandırınUseDefaultServiceProvider:
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 CreateDefaultBuilderCreateWebHostBuilder koddan ayıran adlı Mainbir yöntemdedirRun. 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:
-
Konsol ve hata ayıklama çıkışı için günlüğe kaydetmeyi yapılandırır. Günlüğe kaydetme, veya dosyasının.
appsettings.json - ASP.NET Çekirdek Modülü ile IIS'nin arkasında çalışırken, uygulamanın temel adresini ve bağlantı noktasını yapılandıran IIS Tümleştirmesini
CreateDefaultBuilder. 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. -
ServiceProviderOptions.ValidateScopes Uygulamanın ortamının Geliştirme olup olmadığını ayarlar
true. Daha fazla bilgi için bkz . Kapsam doğrulaması.
tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureAppConfigurationgeçersiz kılınabilir ve artırılabilir ConfigureLoggingve 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
IConfigurationbelirtmek için kullanılır. AşağıdakiConfigureAppConfigurationçağrı, dosyaya uygulama yapılandırmasınıappsettings.xmleklemek için bir temsilci ekler.ConfigureAppConfigurationbirden ç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ındanappsettings.Development.jsonyapılandırılan (LogLevel.Debug) veappsettings.Production.json(LogLevel.Error) içindekiCreateDefaultBuilderayarları geçersiz kılar.ConfigureLoggingbirden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...Aşağıdaki çağrı
ConfigureKestrel, tarafından yapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılanCreateDefaultBuilderdeğ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 UseContentRoot gibi UseConfiguration uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
-
UseSetting ve ilişkili anahtarı seçin. ile
UseSettingbir 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 UseStartup çağrıldığında Configure 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 , Developmentve Stagingdeğerlerini içerirProduction. 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 çalışma zamanı ortamları.
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), .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10") uzantı yöntemi bir UseShutdownTimeoutTimeSpan 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 urlshostsettings.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 RequestDelegatebaş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 yanıt vermesi dışında Start(RequestDelegate uygulaması)http://localhost:8080verir.
Start(Eylem<IRouteBuilder> routeBuilder)
Yönlendirme ara yazılımını kullanmak için bir (IRouteBuilder) örneği 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 | Yanıt |
|---|---|
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 IRouteBuilderkullanı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 <yanıt vermesi dışında Start(Action>IRouteBuilder routeBuilder)http://localhost:8080verir.
StartWith(Eylem<IApplicationBuilder> uygulaması)
yapılandırmak için bir IApplicationBuildertemsilci 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 IApplicationBuilderiç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 <yanıt vermesi dışında StartWith(Action>IApplicationBuilder uygulaması)http://localhost:8080verir.
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 etmek için oluşturucu eklemesiniIWebHostEnvironment:
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 IWebHostEnvironment öğesini de StartupeklersinizConfigureServices:
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 , IWebHostEnvironmentIsStagingve IsProduction yöntemlerini de sunarIsEnvironment(string environmentName). Daha fazla bilgi için bkz. ASP.NET Core çalışma zamanı ortamları.
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 Invoke oluşturulurken yöntemine 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 StopApplication bir uygulamayı düzgün bir şekilde kapatmak için kullanırShutdown:
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
CreateDefaultBuilder
ServiceProviderOptions.ValidateScopes, uygulamanın ortamının Geliştirme olup olmadığını ayarlartrue.
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 ServiceProviderOptions yapılandırınUseDefaultServiceProvider:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
Ek kaynaklar
ASP.NET Core