ASP.NET Core Web ana bilgisayarı
ASP.NET Core uygulamalar bir konağı yapılandırıp başlatır. Ana bilgisayar, uygulama başlatma ve ömür yönetiminden sorumludur. Ana bilgisayar, en azından bir sunucu ve bir istek işleme işlem hattı yapılandırır. Konak, günlüğe kaydetme, bağımlılık ekleme ve yapılandırma de ayarlayabilir.
Bu makalede, yalnızca geriye dönük uyumluluk için kullanılabilen Web ana bilgisayarı ele alınmaktadır. ASP.NET Core şablonları, tüm uygulama türleri için önerilen bir .net genel ana bilgisayarıoluşturur.
Bu makale, Web uygulamalarını barındırmak için olan Web konağını ele alır. Diğer uygulama türleri için genel Konağıkullanın.
Konak ayarlama
Iwebhostbuilder'ın bir örneğini kullanarak bir konak oluşturun. Bu, genellikle uygulamanın giriş noktasında ve yöntemi olarak gerçekleştirilir Main .
Proje şablonlarında, Main program. cs' de bulunur. Tipik bir uygulama, bir konak ayarlamaya başlamak için Createdefaultbuilder çağırır:
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, CreateDefaultBuilder CreateWebHostBuilder Main Oluşturucu nesnesindeki çağrılarındaki koddan ayıran adlı bir yöntemde bulunur Run . Entity Framework Core araçlarınıkullanıyorsanız bu ayrım gereklidir. Araçlar, CreateWebHostBuilder uygulamayı çalıştırmadan Konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir yöntemi bulmayı bekler. Diğer bir seçenek de uygulanır IDesignTimeDbContextFactory . Daha fazla bilgi için bkz. Tasarım zamanı DbContext oluşturma.
CreateDefaultBuilder aşağıdaki görevleri gerçekleştirir:
- KestrelUygulamanın barındırma yapılandırma sağlayıcılarını kullanarak sunucuyu Web sunucusu olarak yapılandırır. KestrelSunucunun varsayılan seçenekleri için bkz Web sunucusu için ASP.NET Core Kestrel yapılandırma ..
- KestrelUygulamanın barındırma yapılandırma sağlayıcılarını kullanarak sunucuyu Web sunucusu olarak yapılandırır. KestrelSunucunun varsayılan seçenekleri için bkz KestrelASP.NET Core'de web sunucusu uygulaması ..
- İçerik kökünü Directory. GetCurrentDirectorytarafından döndürülen yola ayarlar.
- Ana bilgisayar yapılandırmasını şuradan yükler:
- Ön eki olan ortam değişkenleri
ASPNETCORE_(örneğin,ASPNETCORE_ENVIRONMENT). - Komut satırı bağımsız değişkenleri.
- Ön eki olan ortam değişkenleri
- Aşağıdaki sırayla uygulama yapılandırmasını yükler:
- appsettings.json.
- appSettings. {Environment}. JSON.
- Uygulama, giriş derlemesini kullanarak ortamda çalıştırıldığında Kullanıcı gizli dizileri
Development. - 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, bir veya appSettings 'in günlük yapılandırma bölümünde belirtilen günlük filtreleme kurallarını içerir appsettings.json . { Environment}. JSON dosyası.
- ASP.NET Core modülleııs 'nin arkasında çalışırken,
CreateDefaultBuilderuygulamanın temel adresini ve bağlantı noktasını yapılandıran ııs tümleştirmesinida sunar. IIS tümleştirmesi, uygulamayı başlatma hatalarını yakalamayade yapılandırır. IIS varsayılan seçenekleri için bkz IIS ASP.NET Core Windows konak konakları .. - Uygulamanın ortamı geliştirme ortamındaysanız, Serviceprovideroptions. ValidateScopes öğesini olarak ayarlar
true. Daha fazla bilgi için bkz. kapsam doğrulaması.
Tarafından tanımlanan yapılandırma CreateDefaultBuilder , Configureappconfiguration, configureloggingve ıwebhostbuilder'ın diğer yöntemleri ve genişletme yöntemleri tarafından geçersiz kılınabilir ve genişletilebilir. Birkaç örnek aşağıda verilmiştir:
Configureappconfiguration , uygulama için ek belirtmek için kullanılır
IConfiguration. AşağıdakiConfigureAppConfigurationçağrı appsettings.xml dosyasına uygulama yapılandırmasını dahil etmek için bir temsilci ekler.ConfigureAppConfigurationbirden çok kez çağrılabilir. Bu yapılandırmanın ana bilgisayar için (örneğin, sunucu URL 'Leri veya ortam) uygulanmadığı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ı, en düşük günlük düzeyi (Setminimumlevel) değerini LogLevel. Warningolarak yapılandırmak için bir temsilci ekler. Bu ayar, () üzerindeappsettings.Development.jsLogLevel.Debugve tarafından yapılandırılan () appsettings.Production.jsüzerindeki ayarları geçersiz kılarLogLevel.ErrorCreateDefaultBuilder.ConfigureLoggingbirden çok kez çağrılabilir.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...
Aşağıdaki çağrı
ConfigureKestrelvarsayılan limitleri geçersiz kılar . MaxRequestBodySize /30.000.000 bayt, Kestrel tarafından yapılandırıldığında belirlenirCreateDefaultBuilder:WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
Aşağıdaki kullanım Kestrel çağrısı varsayılan limitleri geçersiz kılar . MaxRequestBodySize of 30.000.000 Byte Kestrel by tarafından yapılandırıldığında
CreateDefaultBuilder:WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { options.Limits.MaxRequestBodySize = 20000000; });
İçerik kökü , konağın MVC görünüm dosyaları gibi içerik dosyalarını arayacağı yeri belirler. Uygulama, projenin kök klasöründen başlatıldığında, projenin kök klasörü içerik kökü olarak kullanılır. bu, Visual Studio ve dotnet yeni şablonlardakullanılan varsayılandır.
Uygulama yapılandırması hakkında daha fazla bilgi için bkz ASP.NET Core'de yapılandırma ..
Not
statik yöntemin kullanılmasına alternatif olarak CreateDefaultBuilder , webhostbuilder 'dan bir konak oluşturmak, ASP.NET Core 2. x ile desteklenen bir yaklaşımdır.
Bir ana bilgisayar ayarlanırken, yapılandırma ve ConfigureServices yöntemleri bulunabilir. Bir Startup sınıf belirtilmişse, bir Configure yöntemi tanımlamalıdır. Daha fazla bilgi için bkz. ASP.NET Core 'de uygulama başlatma. Birbirine eklenecek birden çok çağrı ConfigureServices . Configure UseStartup Önceki ayarları değiştir üzerinde veya üzerine birden çok çağrı WebHostBuilder .
Ana bilgisayar yapılandırma değerleri
Webhostbuilder , ana bilgisayar yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:
- Bu biçimdeki ortam değişkenlerini içeren konak Oluşturucu yapılandırması
ASPNETCORE_{configurationKey}. Örneğin,ASPNETCORE_ENVIRONMENT. - Usecontentroot ve useconfiguration gibi uzantılar ( geçersiz kılma yapılandırması bölümüne bakın).
- Usesetting ve ilişkili anahtar. İle bir değer ayarlarken
UseSetting, değer türünden bağımsız olarak bir dize olarak ayarlanır.
Konak, bir değeri en son 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)
IWebHostEnvironment.ApplicationNameÖzelliği, konak oluşturma sırasında usestartup veya Configure çağrıldığında 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 Webhostdefaults. ApplicationKeykullanın:
Konak oluşturma sırasında Usestartup veya Configure çağrıldığında, ıhostingenvironment. ApplicationName özelliği 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 Webhostdefaults. ApplicationKeykullanın:
Anahtar: ApplicationName
Tür: dize
Varsayılan: uygulamanın giriş noktasını içeren derlemenin adı.
Şunu kullanarak ayarla:UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
Yakalama başlatma hataları
Bu ayar, başlatma hatalarının yakalanmasını denetler.
Anahtar: capturestartuperrors
Tür: bool ( true veya 1 )
Varsayılan: varsayılan olarak, false uygulamanın IIS 'nin arkasında çalıştığı durumlar için varsayılan değer olarak Kestrel kullanılır true .
Şunu kullanarak ayarla:CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS
Ne zaman false , başlatma sırasında oluşan hata, ana bilgisayardan çıkılıyor. Ne zaman true , ana bilgisayar başlangıç sırasında özel durumları yakalar ve sunucuyu başlatmaya çalışır.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
İçerik kökü
bu ayar ASP.NET Core içerik dosyalarını aramaya başladığı yeri belirler.
Anahtar: contentroot
Tür: dize
Varsayılan: uygulama derlemesinin bulunduğu klasörü varsayılan olarak belirler.
Şunu kullanarak ayarla: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şlatamaz.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
Daha fazla bilgi için bkz.
Ayrıntılı Hatalar
Ayrıntılı hataların yakalanması gerektiğini belirler.
Anahtar: detailedErrors
Tür: bool ( true veya 1 )
Varsayılan: false
kullanarak ayarlayın:UseSetting
Ortam değişkeni:ASPNETCORE_DETAILEDERRORS
Etkinleştirildiğinde (veya Ortam olarak Development ayarlanırsa), uygulama ayrıntılı özel durumları yakalar.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Ortam
Uygulamanın ortamını ayarlar.
Anahtar: ortam
Tür: string
Varsayılan: Üretim
kullanarak ayarlayın:UseEnvironment
Ortam değişkeni:ASPNETCORE_ENVIRONMENT
Ortam herhangi bir değere ayarlanmış olabilir. Çerçeve tanımlı değerler , Development Staging ve değerlerini Production içerir. Değerler büyük/büyük/büyük harfe duyarlı değildir. Varsayılan olarak Ortam, ortam değişkenlerinden ASPNETCORE_ENVIRONMENT okunur. ortam Visual Studio,ortam değişkenleri dosyanınlaunchSettings.js ayarlanmış olabilir. Daha fazla bilgi için bkz. ASP.NET Core'da birden çok ortam kullanma.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
Başlangıç Derlemelerini Barındırma
Uygulamanın barındıran başlangıç derlemelerini ayarlar.
Anahtar: hostingStartupAssemblies
Tür: string
Varsayılan: Boş dize
kullanarak ayarlayın:UseSetting
Ortam değişkeni:ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
Başlangıçta yüklenmek için başlangıç derlemelerini barındıran noktalı virgülle ayrılmış bir dize.
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. Başlangıç derlemelerini barındırıyorsanız, uygulama başlatma sırasında ortak hizmetlerini derlemek için uygulamanın derlemeye eklenir.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
HTTPS Bağlantı Noktası
HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS'yi zorlamada kullanılır.
Anahtar: https_port
Tür: string
Varsayılan: Varsayılan değer ayar değildir.
kullanarak ayarlayın:UseSetting
Ortam değişkeni:ASPNETCORE_HTTPS_PORT
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
Barındırma Başlatma Derlemelerini Dışlama
Başlangıçta dışlamak için başlangıç derlemelerini barındıran noktalı virgülle ayrılmış bir dize.
Anahtar: hostingStartupExcludeAssemblies
Tür: string
Varsayılan: Boş dize
kullanarak ayarlayın:UseSetting
Ortam değişkeni:ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
Barındırma URL'lerini tercih
Ana bilgisayar, uygulamayla yapılandırılanlar yerine ile yapılandırılmış WebHostBuilder URL'leri dinlemesi gerekip gerek olmadığını IServer gösterir.
Anahtar: preferHostingUrls
Tür: bool ( true veya 1 )
Varsayılan: true
kullanarak ayarlayın:PreferHostingUrls
Ortam değişkeni:ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(false)
Barındırma Başlatmayı Engelleme
Uygulamanın derlemesi tarafından yapılandırılan başlangıç derlemelerini barındırma da dahil olmak üzere, barındırma başlangıç derlemelerinin otomatik yüklenmesini önler. Daha fazla bilgi için bkz. ASP.NET Core 'de barındırma başlangıç derlemelerini kullanın.
Anahtar: preventHostingStartup
Tür: bool ( true veya 1 )
Varsayılan: false
kullanarak 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ına ve protokollere sahip IP adreslerini veya ana bilgisayar adreslerini gösterir.
Anahtar: URL'ler
Tür: string
Varsayılan: http://localhost:5000
kullanarak ayarlayın:UseUrls
Ortam değişkeni:ASPNETCORE_URLS
Noktalı virgülle ayrılmış olarak ayarlayın (;) sunucunun yanıt vermesi gereken URL ön eklerinin listesi. Örneğin, http://localhost:123. Sunucunun belirtilen bağlantı noktası ve protokolü kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerinde istekleri dinlemesi gerektiğini belirtmek için * " " kullanın (örneğin, http://*:5000 ). Protokolün ( http:// veya https:// ) her URL'ye dahil olması gerekir. 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'sini içerir. Daha fazla bilgi için bkz. Web sunucusu için ASP.NET Core Kestrel yapılandırma.
Kestrel kendi uç nokta yapılandırma API'sini içerir. Daha fazla bilgi için bkz. KestrelASP.NET Core'de web sunucusu uygulaması.
Kapatma Zaman Aşımı
Web Ana Bilgisayarı'nın kapanmasını bekleme süresi miktarını belirtir.
Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
kullanarak ayarlayın:UseShutdownTimeout
Ortam değişkeni:ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
Anahtar ile bir int kabul UseSetting etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10") ), UseShutdownTimeout genişletme yöntemi timeSpan alır.
Zaman aşımı süresi boyunca barındırma:
- IApplicationLifetime.ApplicationStopping'i tetikler.
- Barındırılan hizmetleri durdurmayı ve durduranı hizmetlerle ilgili hataları günlüğe kaydetmeyi deneme.
Zaman aşımı süresi barındırılan hizmetlerin tamamı durdurulmadan önce sona ererse, uygulama kapatıldıktan sonra kalan tüm etkin hizmetler durdurulur. Hizmetler işlemeyi bitirmese bile durur. Hizmetlerin durdurmak için ek süre gerektirmesi zaman aşımını artırabilirsiniz.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
Başlangıç Derlemesi
sınıfını aramak için derlemeyi Startup belirler.
Anahtar: startupAssembly
Tür: string
Varsayılan: Uygulamanın derlemesi
kullanarak ayarlayın:UseStartup
Ortam değişkeni:ASPNETCORE_STARTUPASSEMBLY
Derlemeye ad ( string ) veya türüne ( TStartup ) göre başvurul olabilir. Birden UseStartup çok yöntem çağrılırsa, son yöntem önceliklidir.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
Web kökü
Uygulamanın statik varlıklarına göreli yolu ayarlar.
Anahtar: webroot
Tür: string
Varsayılan: Varsayılan wwwroot değerdir. {content root}/wwwroot yolunun mevcut olması gerekir. Yol yoksa, bir no-op dosya sağlayıcısı kullanılır.
kullanarak 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ılma
Web Ana Bilgisayar'ı yapılandırmak için Yapılandırma'yi kullanın. Aşağıdaki örnekte, konak yapılandırması isteğe bağlı olarak bir hostsettings.jsbelirtilir. Dosya üzerindehostsettings.js 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 config (içinde), useConfigurationile ana bilgisayarı yapılandırmak için kullanılır. IWebHostBuilderyapılandırma uygulamanın yapılandırmasına eklenir, ancak tersi doğru — ConfigureAppConfiguration değildir, yapılandırmayı IWebHostBuilder etkilemez.
ile sağlanan yapılandırmayı geçersiz kılma UseUrlshostsettings.js yapılandırmada, komut satırı bağımsız değişken yapılandırması ikinci:
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.js:
{
urls: "http://*:5005"
}
Not
UseConfiguration yalnızca sağlanan anahtarları konak oluşturucu IConfiguration yapılandırmasına kopyalar. Bu reloadOnChange: true nedenle, JSON, INI ve XML ayarları dosyaları için ayarın hiçbir etkisi yoktur.
Belirli bir URL'de konak çalıştırmasını belirtmek için, dotnet run yürüt edilirken istenen değer komut isteminden geçirilebilir. Komut satırı bağımsız değişkeni, dosyasındakihostsettings.jsgeçersiz kılar ve sunucu urls 8080 bağlantı noktasını dinler:
dotnet run --urls "http://*:8080"
Ana bilgisayarı yönetme
Çalıştır
yöntemi Run web uygulamasını başlatır ve ana bilgisayar kapatana kadar çağıran iş parçacığını engeller:
host.Run();
Başlangıç
Yöntemini çağırarak ana bilgisayarı engelleyici olmayan bir şekilde Start çalıştırın:
using (host)
{
host.Start();
Console.ReadLine();
}
Yöntemine url listesi Start geçiriliyorsa, 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 kolaylık yöntemi kullanarak önceden yapılandırılmış varsayılanları kullanarak yeni bir CreateDefaultBuilder konak başlatarak başlatabilirsiniz. Bu yöntemler sunucuyu konsol çıkışı olmadan ve WaitForShutdown ile ara vermeden (Ctrl-C/SIGINT veya SIGTERM) başlatın:
Start(RequestDelegate uygulaması)
ile RequestDelegate başlama:
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Tarayıcıda "Merhaba Dünya!" yanıtını almak için bir http://localhost:5000 istekte Merhaba Dünya WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi Console.WriteLine görüntüler ve bir tuş tuşuna basarak çıkış bekler.
Start(dize url'si, RequestDelegate uygulaması)
URL ve ile çalışmaya RequestDelegate başlama:
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();
}
Start(RequestDelegate uygulaması) ile aynı sonucu üretir, ancak uygulama üzerinde yanıt http://localhost:8080 verir.
Start(Eylem <IRouteBuilder> yoluBuilder)
Yönlendirme ara yazılımı IRouteBuilder kullanmak için (Microsoft.AspNetCore.Routing) örneğini 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();
}
Aşağıdaki tarayıcı isteklerini örneğiyle birlikte kullanın:
| İstek | Yanıt |
|---|---|
http://localhost:5000/hello/Martin |
Merhaba Martin! |
http://localhost:5000/buenosdias/Catrina |
Dias, Cat cat |
http://localhost:5000/throw/ooops! |
"ooops!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/throw |
"Ah ah!" dizesiyle bir özel durum oluşturur |
http://localhost:5000/Sante/Kevin |
Sante,İkin! |
http://localhost:5000 |
Merhaba Dünya! |
WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi Console.WriteLine görüntüler ve bir tuş tuşuna basarak çıkış bekler.
Start(dize url'si, <IRouteBuilder> Eylem yoluBuilder)
URL'si ve örneği 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 üzerinden yanıt vermesi dışında Start(Action <IRouteBuilder> routeBuilder) ile aynı sonucu http://localhost:8080 üretir.
StartWith(Eylem <IApplicationBuilder> uygulaması)
yapılandırmak için bir temsilci IApplicationBuilder sağlama:
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();
}
Tarayıcıda "Merhaba Dünya!" yanıtını almak için bir http://localhost:5000 istekte Merhaba Dünya WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi Console.WriteLine görüntüler ve bir tuş tuşuna basarak çıkış bekler.
StartWith(dize url'si, Eylem <IApplicationBuilder> uygulaması)
yapılandırmak için bir URL ve temsilci IApplicationBuilder belirtin:
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();
}
StartWith(Action <IApplicationBuilder> app) ile aynı sonucu üretir, ancak uygulama üzerinde yanıt http://localhost:8080 verir.
IWebHostEnvironment arabirimi
arabirimi, IWebHostEnvironment uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini IWebHostEnvironment kullanmak için oluşturucu ekleme kullanarak alı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
}
}
Kural tabanlı bir yaklaşım, uygulamayı başlangıçta ortama göre yapılandırmak için kullanılabilir. Alternatif olarak, içinde IWebHostEnvironment kullanmak üzere Startup oluşturucuya ConfigureServices ekleme:
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
Genişletme yöntemine IsDevelopment ek olarak , ve yöntemleri IWebHostEnvironment IsStaging IsProduction IsEnvironment(string environmentName) sunar. Daha fazla bilgi için bkz. ASP.NET Core'da birden çok ortam kullanma.
Hizmet IWebHostEnvironment ayrıca işleme işlem hattının ayar için doğrudan Configure yöntemine de yer ve ardından 5.
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 Invoke oluşturulurken yöntemine yerleştirilebilir:
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;
}
IHostingEnvironment arabirimi
IHostingEnvironment arabirimi, uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini IHostingEnvironment kullanmak için oluşturucu ekleme kullanarak alın:
public class CustomFileReader
{
private readonly IHostingEnvironment _env;
public CustomFileReader(IHostingEnvironment env)
{
_env = env;
}
public string ReadFile(string filePath)
{
var fileProvider = _env.WebRootFileProvider;
// Process the file here
}
}
Kural tabanlı bir yaklaşım, uygulamayı başlangıçta ortama göre yapılandırmak için kullanılabilir. Alternatif olarak, içinde IHostingEnvironment kullanmak üzere Startup oluşturucuya ConfigureServices ekleme:
public class Startup
{
public Startup(IHostingEnvironment env)
{
HostingEnvironment = env;
}
public IHostingEnvironment HostingEnvironment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
// Development configuration
}
else
{
// Staging/Production configuration
}
var contentRootPath = HostingEnvironment.ContentRootPath;
}
}
Not
Genişletme yöntemine IsDevelopment ek olarak , ve yöntemleri IHostingEnvironment IsStaging IsProduction IsEnvironment(string environmentName) sunar. Daha fazla bilgi için bkz. ASP.NET Core'da birden çok ortam kullanma.
Hizmet IHostingEnvironment ayrıca işleme işlem hattının ayar için doğrudan Configure yöntemine de yer ve ardından 5.
public void Configure(IApplicationBuilder app, IHostingEnvironment 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;
}
IHostingEnvironmentözel ara yazılım Invoke oluşturulurken yöntemine yerleştirilebilir:
public async Task Invoke(HttpContext context, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
// Configure middleware for Development
}
else
{
// Configure middleware for Staging/Production
}
var contentRootPath = env.ContentRootPath;
}
IHostApplicationLifetime arabirimi
IHostApplicationLifetime başlatma sonrası ve kapatma etkinliklerine izin verir. Arabirimde üç özellik, başlatma ve kapatma olaylarını Action tanımlayan yöntemleri kaydetmek için kullanılan iptal belirteçleridir.
| İptal Belirteci | Tetiklendiğinde… |
|---|---|
ApplicationStarted |
Konak tamamen başlatıldı. |
ApplicationStopped |
Konak, yetkisiz kapatmayı tamamlar. Tüm istekler işlenmeli. Bu olay tamamlandıktan sonra kapatma blokları. |
ApplicationStopping |
Konak, yetkisiz bir kapatma işlemi gerçekleştirerek. İstekler hala işlmektedir. Bu olay tamamlandıktan sonra 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ını ister. Aşağıdaki sınıf, StopApplication sınıfın yöntemi çağrıldığında bir uygulamayı düzgün bir şekilde kapatmak için kullanır Shutdown :
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Iapplicationlifetime arabirimi
Iapplicationlifetime , başlatma sonrası ve kapalı etkinlikler için izin verir. Arabirimdeki üç özellik, Action Başlangıç ve kapalı olayları tanımlayan yöntemleri kaydetmek için kullanılan iptal belirteçleridir.
| İptal belirteci | … tetiklendi |
|---|---|
| ApplicationStarted | Konak tam olarak başlatıldı. |
| Applicationdurdurulan | Ana bilgisayar düzgün kapanma işlemini tamamlıyor. Tüm isteklerin işlenmesi gerekir. Bu olay tamamlanana kadar kapalı bloklar. |
| Applicationdurduruluyor | Ana bilgisayar düzgün bir şekilde kapanma gerçekleştiriyor. İstekler hala işliyor olabilir. Bu olay tamamlanana kadar kapalı bloklar. |
public class Startup
{
public void Configure(IApplicationBuilder app, IApplicationLifetime 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ını ister. Aşağıdaki sınıf, StopApplication sınıfın yöntemi çağrıldığında bir uygulamayı düzgün bir şekilde kapatmak için kullanır Shutdown :
public class MyClass
{
private readonly IApplicationLifetime _appLifetime;
public MyClass(IApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
Kapsam doğrulaması
Createdefaultbuilder , uygulamanın ortamı geliştirmede serviceprovideroptions. validatescopes ' i ayarlar true .
, ValidateScopes Olarak ayarlandığında true , varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:
- Kapsamlı hizmetler doğrudan veya dolaylı olarak kök hizmet sağlayıcısından çözümlenmez.
- Kapsamlı hizmetler doğrudan veya dolaylı olarak Singleton 'a eklenmiş değildir.
Buildserviceprovider çağrıldığında kök hizmet sağlayıcısı oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcının uygulamayla başladığı ve uygulama kapandığında bırakıldığı uygulama/sunucunun yaşam süresine karşılık gelir.
Kapsamlı hizmetler kendilerini oluşturan kapsayıcı tarafından atılmış. Kök kapsayıcıda kapsamlı bir hizmet oluşturulduysa, hizmetin ömrü etkin şekilde tek başına yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılmış olur. Hizmet kapsamlarını doğrulamak, çağrıldığında bu durumları yakalar BuildServiceProvider .
Üretim ortamında da dahil olmak üzere kapsamları her zaman doğrulamak için, ana bilgisayar Oluşturucu 'da Serviceprovideroptions 'ı usedefaultserviceprovider ile yapılandırın:
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})