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:

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ğıdaki ConfigureAppConfiguration çağrı appsettings.xml dosyasına uygulama yapılandırmasını dahil etmek için bir temsilci ekler. ConfigureAppConfiguration birden ç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.js LogLevel.Debug ve tarafından yapılandırılan () appsettings.Production.jsüzerindeki ayarları geçersiz kılar LogLevel.Error CreateDefaultBuilder . ConfigureLogging birden çok kez çağrılabilir.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => 
        {
            logging.SetMinimumLevel(LogLevel.Warning);
        })
        ...
    
  • Aşağıdaki çağrı ConfigureKestrel varsayılan limitleri geçersiz kılar . MaxRequestBodySize /30.000.000 bayt, Kestrel tarafından yapılandırıldığında belirlenir CreateDefaultBuilder :

    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:

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 Serviceprovideroptionsusedefaultserviceprovider ile yapılandırın:

WebHost.CreateDefaultBuilder(args)
    .UseDefaultServiceProvider((context, options) => {
        options.ValidateScopes = true;
    })

Ek kaynaklar