ASP.NET Core Web Ana Bilgisayarı

ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.

Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, web uygulamaları için önerilen bir WebApplicationBuilder ve WebApplicationoluşturur. ve WebApplicationhakkında WebApplicationBuilder daha fazla bilgi için bkz. ASP.NET Core 5.0'dan 6.0'a geçirme

Konak ayarlama

örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle içindeki yöntemi Program.csolan uygulamanın giriş noktasında Main gerçekleştirilir. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilderRun koddan ayıran adlı CreateWebHostBuilderbir yöntemdedirMain. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.

CreateDefaultBuilder aşağıdaki görevleri gerçekleştirir:

tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:

  • ConfigureAppConfiguration , uygulama için ek IConfiguration belirtmek için kullanılır. Aşağıdaki ConfigureAppConfiguration çağrı, dosyaya uygulama yapılandırmasını appsettings.xml eklemek için bir temsilci ekler. ConfigureAppConfiguration birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
        })
        ...
    
  • Aşağıdaki ConfigureLogging çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafından CreateDefaultBuilderyapılandırılan (LogLevel.Debug) ve appsettings.Production.json (LogLevel.Error) içindeki appsettings.Development.json ayarları geçersiz kılar. ConfigureLogging birden çok kez çağrılabilir.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => 
        {
            logging.SetMinimumLevel(LogLevel.Warning);
        })
        ...
    
  • Aşağıdaki çağrıConfigureKestrel, tarafından CreateDefaultBuilderyapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:

    WebHost.CreateDefaultBuilder(args)
        .ConfigureKestrel((context, options) =>
        {
            options.Limits.MaxRequestBodySize = 20000000;
        });
    

İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.

Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.

Not

Statik CreateDefaultBuilder yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.

Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup sınıf belirtilirse bir Configure yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure veya UseStartup bu ayarlarda WebHostBuilder birden çok çağrı.

Konak yapılandırma değerleri

WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:

  • biçiminde ASPNETCORE_{configurationKey}ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin, ASPNETCORE_ENVIRONMENT.
  • ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
  • UseSetting ve ilişkili anahtarı seçin. ile 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 Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:

Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")

Başlangıç Hatalarını Yakalama

Bu ayar başlangıç hatalarının yakalanmasını denetler.

Anahtar: captureStartupErrors
Tür: bool (true veya 1)
Varsayılan: false Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS

olduğunda false, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.

WebHost.CreateDefaultBuilder(args)
    .CaptureStartupErrors(true)

İçerik kökü

Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.

Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT

İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.

WebHost.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\<content-root>")

Daha fazla bilgi için bkz.

Ayrıntılı Hatalar

Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.

Anahtar: detailedErrors
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS

Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development), uygulama ayrıntılı özel durumları yakalar.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

Ortam

Uygulamanın ortamını ayarlar.

Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT

Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Stagingve Productiondeğerlerini içerirDevelopment. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT okunur. Visual Studio kullanırken, dosyada launchSettings.json ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

WebHost.CreateDefaultBuilder(args)
    .UseEnvironment(EnvironmentName.Development)

Barındırma Başlangıç Derlemeleri

Uygulamanın barındırma başlangıç derlemelerini ayarlar.

Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")

HTTPS Bağlantı Noktası

HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS zorlamada kullanılır.

Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS

WebHost.CreateDefaultBuilder(args)
    .UseSetting("https_port", "8080")

Barındırma Başlangıç Dışlama Derlemeleri

Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")

Barındırma URL'lerini tercih et

Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder yapılandırılan URL'leri dinlemesi IServer gerekip gerekmediğini gösterir.

Anahtar: preferHostingUrls
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS

WebHost.CreateDefaultBuilder(args)
    .PreferHostingUrls(true)

Barındırma Başlatmayı Engelle

Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Anahtar: preventHostingStartup
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")

Sunucu URL'leri

Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.

Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS

Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http:// veya https://) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")

Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.

Kapatma Zaman Aşımı

Web Konağı'nın kapatılmasını bekleme süresini belirtir.

Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS

Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting alır.

Zaman aşımı süresi boyunca şunları barındırın:

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, ON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: trueJShiç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 http://localhost:8080yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.

Start(Eylem<IRouteBuilder> routeBuilder)

Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder kullanın:

using (var host = WebHost.Start(router => router
    .MapGet("hello/{name}", (req, res, data) => 
        res.WriteAsync($"Hello, {data.Values["name"]}!"))
    .MapGet("buenosdias/{name}", (req, res, data) => 
        res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
    .MapGet("throw/{message?}", (req, res, data) => 
        throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
    .MapGet("{greeting}/{name}", (req, res, data) => 
        res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
    .MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
    Console.WriteLine("Use Ctrl-C to shutdown the host...");
    host.WaitForShutdown();
}

Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:

İste Response
http://localhost:5000/hello/Martin Merhaba Martin!
http://localhost:5000/buenosdias/Catrina Buenos dias, Catrina!
http://localhost:5000/throw/ooops! "ooops!" dizesiyle bir özel durum oluşturur
http://localhost:5000/throw "Uh oh!" dizesiyle bir özel durum oluşturur
http://localhost:5000/Sante/Kevin Sante, Kevin!
http://localhost:5000 Merhaba Dünya!

WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine ve bir tuş basmasının çıkmasını bekler.

Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)

URL'yi ve örneğini 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 http://localhost:8080yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.

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 http://localhost:8080yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.

IWebHostEnvironment arabirimi

Arabirim, IWebHostEnvironment uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment etmek için oluşturucu eklemesini kullanın:

public class CustomFileReader
{
    private readonly IWebHostEnvironment _env;

    public CustomFileReader(IWebHostEnvironment env)
    {
        _env = env;
    }

    public string ReadFile(string filePath)
    {
        var fileProvider = _env.WebRootFileProvider;
        // Process the file here
    }
}

Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup öğesini de ConfigureServiceseklersinizIWebHostEnvironment:

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 , IWebHostEnvironmentIsProductionve IsEnvironment(string environmentName) yöntemlerini de sunarIsStaging. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Hizmet, IWebHostEnvironment işleme işlem hattını ayarlamak için doğrudan Configure yöntemine de eklenebilir:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // In Development, use the Developer Exception Page
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // In Staging/Production, route exceptions to /error
        app.UseExceptionHandler("/error");
    }

    var contentRootPath = env.ContentRootPath;
}

IWebHostEnvironmentözel ara yazılım oluşturulurken yöntemine Invoke eklenebilir:

public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Configure middleware for Development
    }
    else
    {
        // Configure middleware for Staging/Production
    }

    var contentRootPath = env.ContentRootPath;
}

IHostApplicationLifetime arabirimi

IHostApplicationLifetime başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action için kullanılan iptal belirteçleridir.

İptal Belirteci Tetiklendiğinde...
ApplicationStarted Ana bilgisayar tamamen başlatıldı.
ApplicationStopped Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları.
ApplicationStopping Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları.
public class Startup
{
    public void Configure(IApplicationBuilder app, IHostApplicationLifetime appLifetime)
    {
        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);

        Console.CancelKeyPress += (sender, eventArgs) =>
        {
            appLifetime.StopApplication();
            // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
            eventArgs.Cancel = true;
        };
    }

    private void OnStarted()
    {
        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        // Perform post-stopped activities here
    }
}

StopApplication uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication:

public class MyClass
{
    private readonly IHostApplicationLifetime _appLifetime;

    public MyClass(IHostApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }

    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

Kapsam doğrulaması

CreateDefaultBuildertrue, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.

ValidateScopes olarak ayarlandığındatrue, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:

  • Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
  • Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.

Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.

Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider bu durumları yakalar.

Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:

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

Ek kaynaklar

ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.

Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, tüm uygulama türleri için önerilen bir .NET Genel Ana Bilgisayarı oluşturur.

Konak ayarlama

örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle uygulamanın giriş noktası olan yönteminde Main gerçekleştirilir.

Proje şablonlarında içinde Main bulunur Program.cs. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilderRun koddan ayıran adlı CreateWebHostBuilderbir yöntemdedirMain. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.

CreateDefaultBuilder aşağıdaki görevleri gerçekleştirir:

tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:

  • ConfigureAppConfiguration , uygulama için ek IConfiguration belirtmek için kullanılır. Aşağıdaki ConfigureAppConfiguration çağrı, dosyaya uygulama yapılandırmasını appsettings.xml eklemek için bir temsilci ekler. ConfigureAppConfiguration birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
        })
        ...
    
  • Aşağıdaki ConfigureLogging çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafından CreateDefaultBuilderyapılandırılan (LogLevel.Debug) ve appsettings.Production.json (LogLevel.Error) içindeki appsettings.Development.json ayarları geçersiz kılar. ConfigureLogging birden çok kez çağrılabilir.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => 
        {
            logging.SetMinimumLevel(LogLevel.Warning);
        })
        ...
    
  • Aşağıdaki çağrıConfigureKestrel, tarafından CreateDefaultBuilderyapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:

    WebHost.CreateDefaultBuilder(args)
        .ConfigureKestrel((context, options) =>
        {
            options.Limits.MaxRequestBodySize = 20000000;
        });
    

İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.

Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.

Not

Statik CreateDefaultBuilder yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.

Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup sınıf belirtilirse bir Configure yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure veya UseStartup bu ayarlarda WebHostBuilder birden çok çağrı.

Konak yapılandırma değerleri

WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:

  • biçiminde ASPNETCORE_{configurationKey}ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin, ASPNETCORE_ENVIRONMENT.
  • ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
  • UseSetting ve ilişkili anahtarı seçin. ile 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 Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:

Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")

Başlangıç Hatalarını Yakalama

Bu ayar başlangıç hatalarının yakalanmasını denetler.

Anahtar: captureStartupErrors
Tür: bool (true veya 1)
Varsayılan: false Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS

olduğunda false, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.

WebHost.CreateDefaultBuilder(args)
    .CaptureStartupErrors(true)

İçerik kökü

Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.

Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT

İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.

WebHost.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\<content-root>")

Daha fazla bilgi için bkz.

Ayrıntılı Hatalar

Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.

Anahtar: detailedErrors
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS

Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development), uygulama ayrıntılı özel durumları yakalar.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

Ortam

Uygulamanın ortamını ayarlar.

Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT

Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Stagingve Productiondeğerlerini içerirDevelopment. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT okunur. Visual Studio kullanırken, dosyada launchSettings.json ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

WebHost.CreateDefaultBuilder(args)
    .UseEnvironment(EnvironmentName.Development)

Barındırma Başlangıç Derlemeleri

Uygulamanın barındırma başlangıç derlemelerini ayarlar.

Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")

HTTPS Bağlantı Noktası

HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS zorlamada kullanılır.

Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS

WebHost.CreateDefaultBuilder(args)
    .UseSetting("https_port", "8080")

Barındırma Başlangıç Dışlama Derlemeleri

Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")

Barındırma URL'lerini tercih et

Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder yapılandırılan URL'leri dinlemesi IServer gerekip gerekmediğini gösterir.

Anahtar: preferHostingUrls
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS

WebHost.CreateDefaultBuilder(args)
    .PreferHostingUrls(true)

Barındırma Başlatmayı Engelle

Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Anahtar: preventHostingStartup
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")

Sunucu URL'leri

Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.

Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS

Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http:// veya https://) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")

Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma.

Kapatma Zaman Aşımı

Web Konağı'nın kapatılmasını bekleme süresini belirtir.

Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS

Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting alır.

Zaman aşımı süresi boyunca şunları barındırın:

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, ON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: trueJShiç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 http://localhost:8080yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.

Start(Eylem<IRouteBuilder> routeBuilder)

Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder kullanın:

using (var host = WebHost.Start(router => router
    .MapGet("hello/{name}", (req, res, data) => 
        res.WriteAsync($"Hello, {data.Values["name"]}!"))
    .MapGet("buenosdias/{name}", (req, res, data) => 
        res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
    .MapGet("throw/{message?}", (req, res, data) => 
        throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
    .MapGet("{greeting}/{name}", (req, res, data) => 
        res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
    .MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
    Console.WriteLine("Use Ctrl-C to shutdown the host...");
    host.WaitForShutdown();
}

Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:

İste Response
http://localhost:5000/hello/Martin Merhaba Martin!
http://localhost:5000/buenosdias/Catrina Buenos dias, Catrina!
http://localhost:5000/throw/ooops! "ooops!" dizesiyle bir özel durum oluşturur
http://localhost:5000/throw "Uh oh!" dizesiyle bir özel durum oluşturur
http://localhost:5000/Sante/Kevin Sante, Kevin!
http://localhost:5000 Merhaba Dünya!

WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine ve bir tuş basmasının çıkmasını bekler.

Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)

URL'yi ve örneğini 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 http://localhost:8080yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.

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 http://localhost:8080yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.

IWebHostEnvironment arabirimi

Arabirim, IWebHostEnvironment uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment etmek için oluşturucu eklemesini kullanın:

public class CustomFileReader
{
    private readonly IWebHostEnvironment _env;

    public CustomFileReader(IWebHostEnvironment env)
    {
        _env = env;
    }

    public string ReadFile(string filePath)
    {
        var fileProvider = _env.WebRootFileProvider;
        // Process the file here
    }
}

Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup öğesini de ConfigureServiceseklersinizIWebHostEnvironment:

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 , IWebHostEnvironmentIsProductionve IsEnvironment(string environmentName) yöntemlerini de sunarIsStaging. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Hizmet, IWebHostEnvironment işleme işlem hattını ayarlamak için doğrudan Configure yöntemine de eklenebilir:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // In Development, use the Developer Exception Page
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // In Staging/Production, route exceptions to /error
        app.UseExceptionHandler("/error");
    }

    var contentRootPath = env.ContentRootPath;
}

IWebHostEnvironmentözel ara yazılım oluşturulurken yöntemine Invoke eklenebilir:

public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Configure middleware for Development
    }
    else
    {
        // Configure middleware for Staging/Production
    }

    var contentRootPath = env.ContentRootPath;
}

IHostApplicationLifetime arabirimi

IHostApplicationLifetime başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action için kullanılan iptal belirteçleridir.

İptal Belirteci Tetiklendiğinde...
ApplicationStarted Ana bilgisayar tamamen başlatıldı.
ApplicationStopped Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları.
ApplicationStopping Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları.
public class Startup
{
    public void Configure(IApplicationBuilder app, IHostApplicationLifetime appLifetime)
    {
        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);

        Console.CancelKeyPress += (sender, eventArgs) =>
        {
            appLifetime.StopApplication();
            // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
            eventArgs.Cancel = true;
        };
    }

    private void OnStarted()
    {
        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        // Perform post-stopped activities here
    }
}

StopApplication uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication:

public class MyClass
{
    private readonly IHostApplicationLifetime _appLifetime;

    public MyClass(IHostApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }

    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

Kapsam doğrulaması

CreateDefaultBuildertrue, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.

ValidateScopes olarak ayarlandığındatrue, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:

  • Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
  • Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.

Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.

Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider bu durumları yakalar.

Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:

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

Ek kaynaklar

ASP.NET Core uygulamaları bir ana bilgisayar yapılandırır ve başlatır. Ana bilgisayar, uygulamanın başlatılmasından ve ömür boyu yönetiminden sorumludur. Konak en azından bir sunucu ve istek işleme işlem hattı yapılandırmaktadır. Konak ayrıca günlüğe kaydetme, bağımlılık ekleme ve yapılandırmayı da ayarlayabilir.

Bu makale, yalnızca geriye dönük uyumluluk için kullanılabilen Web Konağını kapsar. ASP.NET Core şablonları, tüm uygulama türleri için önerilen bir .NET Genel Ana Bilgisayarı oluşturur.

Konak ayarlama

örneğini IWebHostBuilderkullanarak bir konak oluşturun. Bu genellikle uygulamanın giriş noktası olan yönteminde Main gerçekleştirilir.

Proje şablonlarında içinde Main bulunur Program.cs. Konak ayarlamaya başlamak için tipik bir uygulama çağrısı CreateDefaultBuilder :

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Çağıran kod, oluşturucu nesnesinde çağıran CreateDefaultBuilderRun koddan ayıran adlı CreateWebHostBuilderbir yöntemdedirMain. Entity Framework Core araçlarını kullanıyorsanız bu ayrım gereklidir. Araçlar, uygulamayı çalıştırmadan konağı yapılandırmak için tasarım zamanında çağırabilecekleri bir CreateWebHostBuilder yöntem bulmayı bekler. Bir alternatif de uygulamaktır IDesignTimeDbContextFactory. Daha fazla bilgi için bkz . Tasarım zamanı DbContext Oluşturma.

CreateDefaultBuilder aşağıdaki görevleri gerçekleştirir:

tarafından CreateDefaultBuilder tanımlanan yapılandırma, tarafından ConfigureLogginggeçersiz kılınabilir ve artırılabilir ConfigureAppConfigurationve diğer yöntemleri ve uzantı yöntemleri tarafından IWebHostBuilderdeğiştirilebilir. Birkaç örnek aşağıda verilmiştir:

  • ConfigureAppConfiguration , uygulama için ek IConfiguration belirtmek için kullanılır. Aşağıdaki ConfigureAppConfiguration çağrı, dosyaya uygulama yapılandırmasını appsettings.xml eklemek için bir temsilci ekler. ConfigureAppConfiguration birden çok kez çağrılabilir. Bu yapılandırmanın konak (örneğin, sunucu URL'leri veya ortam) için geçerli olmadığını unutmayın. Konak yapılandırma değerleri bölümüne bakın.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
        })
        ...
    
  • Aşağıdaki ConfigureLogging çağrı, için en düşük günlük düzeyini (SetMinimumLevel) yapılandırmak için LogLevel.Warningbir temsilci ekler. Bu ayar, tarafından CreateDefaultBuilderyapılandırılan (LogLevel.Debug) ve appsettings.Production.json (LogLevel.Error) içindeki appsettings.Development.json ayarları geçersiz kılar. ConfigureLogging birden çok kez çağrılabilir.

    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => 
        {
            logging.SetMinimumLevel(LogLevel.Warning);
        })
        ...
    
  • Aşağıdaki çağrıConfigureKestrel, tarafından CreateDefaultBuilderyapılandırıldığında Kestrel oluşturulan 30.000.000 baytlık varsayılan Limits.MaxRequestBodySize değerini geçersiz kılar:

    WebHost.CreateDefaultBuilder(args)
        .ConfigureKestrel((context, options) =>
        {
            options.Limits.MaxRequestBodySize = 20000000;
        });
    

İçerik kökü, konağın MVC görünüm dosyaları gibi içerik dosyalarını nerede aradığını belirler. Uygulama projenin kök klasöründen başlatıldığında, içerik kökü olarak projenin kök klasörü kullanılır. Bu, Visual Studio'da kullanılan varsayılan değerdir ve dotnet yeni şablonlarıdır.

Uygulama yapılandırması hakkında daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma.

Not

Statik CreateDefaultBuilder yöntemi kullanmaya alternatif olarak, 'den WebHostBuilder konak oluşturmak, ASP.NET Core 2.x ile desteklenen bir yaklaşımdır.

Bir konak Configure ayarlanırken ve ConfigureServices yöntemler sağlanabilir. Bir Startup sınıf belirtilirse bir Configure yöntem tanımlaması gerekir. Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma. Birbirinin sonuna ConfigureServices eklenecek birden çok çağrı. Önceki ayarları değiştirmek için Configure veya UseStartup bu ayarlarda WebHostBuilder birden çok çağrı.

Konak yapılandırma değerleri

WebHostBuilder konak yapılandırma değerlerini ayarlamak için aşağıdaki yaklaşımları kullanır:

  • biçiminde ASPNETCORE_{configurationKey}ortam değişkenleri içeren konak oluşturucu yapılandırması. Örneğin, ASPNETCORE_ENVIRONMENT.
  • ve UseConfiguration gibi UseContentRoot uzantılar (Yapılandırmayı geçersiz kılma bölümüne bakın).
  • UseSetting ve ilişkili anahtarı seçin. ile 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 Configure çağrıldığında UseStartup otomatik olarak ayarlanır. Değer, uygulamanın giriş noktasını içeren derlemenin adına ayarlanır. Değeri açıkça ayarlamak için kullanın WebHostDefaults.ApplicationKey:

Anahtar: applicationName
Tür: dize
Varsayılan: Uygulamanın giriş noktasını içeren derlemenin adı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_APPLICATIONNAME

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")

Başlangıç Hatalarını Yakalama

Bu ayar başlangıç hatalarının yakalanmasını denetler.

Anahtar: captureStartupErrors
Tür: bool (true veya 1)
Varsayılan: false Uygulama IIS'nin arkasında çalıştırılmadığı Kestrel sürece varsayılan olarak ayarlanır ve burada varsayılan değeri olur true.
Şu şekilde ayarlayın: CaptureStartupErrors
Ortam değişkeni: ASPNETCORE_CAPTURESTARTUPERRORS

olduğunda false, başlatma sırasındaki hatalar konağın çıkmasıyla sonuçlanır. olduğunda true, konak başlatma sırasında özel durumları yakalar ve sunucuyu başlatmayı dener.

WebHost.CreateDefaultBuilder(args)
    .CaptureStartupErrors(true)

İçerik kökü

Bu ayar, ASP.NET Core'un içerik dosyalarını aramaya nereden başladığını belirler.

Anahtar: contentRoot
Tür: dize
Varsayılan: Varsayılan olarak uygulama derlemesinin bulunduğu klasörü kullanır.
Şu şekilde ayarlayın: UseContentRoot
Ortam değişkeni: ASPNETCORE_CONTENTROOT

İçerik kökü, web kökü için temel yol olarak da kullanılır. İçerik kök yolu yoksa konak başlatılamaz.

WebHost.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\<content-root>")

Daha fazla bilgi için bkz.

Ayrıntılı Hatalar

Ayrıntılı hataların yakalanması gerekip gerekmediğini belirler.

Anahtar: detailedErrors
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_DETAILEDERRORS

Etkinleştirildiğinde (veya Ortam olarak ayarlandığında Development), uygulama ayrıntılı özel durumları yakalar.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

Ortam

Uygulamanın ortamını ayarlar.

Anahtar: ortam
Tür: dize
Varsayılan: Üretim
Şu şekilde ayarlayın: UseEnvironment
Ortam değişkeni: ASPNETCORE_ENVIRONMENT

Ortam herhangi bir değere ayarlanabilir. Çerçeve tanımlı değerler , Stagingve Productiondeğerlerini içerirDevelopment. Değerler büyük/küçük harfe duyarlı değildir. Ortam varsayılan olarak ortam değişkeninden ASPNETCORE_ENVIRONMENT okunur. Visual Studio kullanırken, dosyada launchSettings.json ortam değişkenleri ayarlanabilir. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

WebHost.CreateDefaultBuilder(args)
    .UseEnvironment(EnvironmentName.Development)

Barındırma Başlangıç Derlemeleri

Uygulamanın barındırma başlangıç derlemelerini ayarlar.

Anahtar: hostingStartupAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

Başlatma sırasında yüklenecek barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Yapılandırma değeri varsayılan olarak boş bir dize olsa da, barındırma başlangıç derlemeleri her zaman uygulamanın derlemesini içerir. Barındırma başlangıç derlemeleri sağlanırken, uygulama başlatma sırasında ortak hizmetlerini oluştururken yüklenmek üzere uygulamanın derlemesine eklenirler.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")

HTTPS Bağlantı Noktası

HTTPS yeniden yönlendirme bağlantı noktasını ayarlayın. HTTPS zorlamada kullanılır.

Anahtar: https_port
Tür: dize
Varsayılan: Varsayılan değer ayarlanmadı.
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HTTPS_PORTS

WebHost.CreateDefaultBuilder(args)
    .UseSetting("https_port", "8080")

Barındırma Başlangıç Dışlama Derlemeleri

Başlatma sırasında hariç tutulacak, barındırma başlangıç derlemelerinin noktalı virgülle ayrılmış dizesi.

Anahtar: hostingStartupExcludeAssemblies
Tür: dize
Varsayılan: Boş dize
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")

Barındırma URL'lerini tercih et

Konağın uygulamayla yapılandırılan url'ler yerine ile WebHostBuilder yapılandırılan URL'leri dinlemesi IServer gerekip gerekmediğini gösterir.

Anahtar: preferHostingUrls
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: PreferHostingUrls
Ortam değişkeni: ASPNETCORE_PREFERHOSTINGURLS

WebHost.CreateDefaultBuilder(args)
    .PreferHostingUrls(true)

Barındırma Başlatmayı Engelle

Uygulamanın derlemesi tarafından yapılandırılan barındırma başlangıç derlemeleri de dahil olmak üzere barındırma başlangıç derlemelerinin otomatik yüklenmesini engeller. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Anahtar: preventHostingStartup
Tür: bool (true veya 1)
Varsayılan: false
Şu şekilde ayarlayın: UseSetting
Ortam değişkeni: ASPNETCORE_PREVENTHOSTINGSTARTUP

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")

Sunucu URL'leri

Sunucunun istekler için dinlemesi gereken bağlantı noktaları ve protokoller içeren IP adreslerini veya konak adreslerini gösterir.

Anahtar: url'ler
Tür: dize
Varsayılan: http://localhost:5000
Şu şekilde ayarlayın: UseUrls
Ortam değişkeni: ASPNETCORE_URLS

Sunucunun yanıt vermesi gereken noktalı virgülle ayrılmış (;) URL ön eklerinin listesi) olarak ayarlayın. Örneğin, http://localhost:123. Sunucunun belirtilen bağlantı noktasını ve protokolü (örneğin, http://*:5000) kullanarak herhangi bir IP adresi veya ana bilgisayar adı üzerindeki istekleri dinlemesi gerektiğini belirtmek için "*" kullanın. Protokol (http:// veya https://) her URL'ye eklenmelidir. Desteklenen biçimler sunucular arasında farklılık gösterir.

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")

Kestrel kendi uç nokta yapılandırma API'sine sahiptir. Daha fazla bilgi için bkz Kestrel . ASP.NET Core'da web sunucusu.

Kapatma Zaman Aşımı

Web Konağı'nın kapatılmasını bekleme süresini belirtir.

Anahtar: shutdownTimeoutSeconds
Tür: int
Varsayılan: 5
Şu şekilde ayarlayın: UseShutdownTimeout
Ortam değişkeni: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS

Anahtar ile bir int kabul etse de (örneğin, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), UseShutdownTimeout uzantı yöntemi bir TimeSpanUseSetting alır.

Zaman aşımı süresi boyunca şunları barındırın:

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, ON, INI ve XML ayarları dosyalarının ayarlanmasının reloadOnChange: trueJShiç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 http://localhost:8080yanıt vermesi dışında Start(RequestDelegate uygulaması) ile aynı sonucu verir.

Start(Eylem<IRouteBuilder> routeBuilder)

Yönlendirme ara yazılımını kullanmak için bir (Microsoft.AspNetCore.Routing) örneği IRouteBuilder kullanın:

using (var host = WebHost.Start(router => router
    .MapGet("hello/{name}", (req, res, data) => 
        res.WriteAsync($"Hello, {data.Values["name"]}!"))
    .MapGet("buenosdias/{name}", (req, res, data) => 
        res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
    .MapGet("throw/{message?}", (req, res, data) => 
        throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
    .MapGet("{greeting}/{name}", (req, res, data) => 
        res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
    .MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
    Console.WriteLine("Use Ctrl-C to shutdown the host...");
    host.WaitForShutdown();
}

Örnekle birlikte aşağıdaki tarayıcı isteklerini kullanın:

İste Response
http://localhost:5000/hello/Martin Merhaba Martin!
http://localhost:5000/buenosdias/Catrina Buenos dias, Catrina!
http://localhost:5000/throw/ooops! "ooops!" dizesiyle bir özel durum oluşturur
http://localhost:5000/throw "Uh oh!" dizesiyle bir özel durum oluşturur
http://localhost:5000/Sante/Kevin Sante, Kevin!
http://localhost:5000 Merhaba Dünya!

WaitForShutdown bir kesme (Ctrl-C/SIGINT veya SIGTERM) verilene kadar engeller. Uygulama iletiyi görüntüler Console.WriteLine ve bir tuş basmasının çıkmasını bekler.

Start(dize url'si, Eylem<IRouteBuilder> routeBuilder)

URL'yi ve örneğini 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 http://localhost:8080yanıt vermesi dışında Start(Action<IRouteBuilder> routeBuilder) ile aynı sonucu verir.

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 http://localhost:8080yanıt vermesi dışında StartWith(Action<IApplicationBuilder> uygulaması) ile aynı sonucu verir.

IWebHostEnvironment arabirimi

Arabirim, IWebHostEnvironment uygulamanın web barındırma ortamı hakkında bilgi sağlar. Özelliklerini ve uzantı yöntemlerini kullanmak için öğesini elde IWebHostEnvironment etmek için oluşturucu eklemesini kullanın:

public class CustomFileReader
{
    private readonly IWebHostEnvironment _env;

    public CustomFileReader(IWebHostEnvironment env)
    {
        _env = env;
    }

    public string ReadFile(string filePath)
    {
        var fileProvider = _env.WebRootFileProvider;
        // Process the file here
    }
}

Uygulamayı başlangıçta ortama göre yapılandırmak için kural tabanlı bir yaklaşım kullanılabilir. Alternatif olarak, içinde kullanmak üzere oluşturucuya Startup öğesini de ConfigureServiceseklersinizIWebHostEnvironment:

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 , IWebHostEnvironmentIsProductionve IsEnvironment(string environmentName) yöntemlerini de sunarIsStaging. Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Hizmet, IWebHostEnvironment işleme işlem hattını ayarlamak için doğrudan Configure yöntemine de eklenebilir:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // In Development, use the Developer Exception Page
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // In Staging/Production, route exceptions to /error
        app.UseExceptionHandler("/error");
    }

    var contentRootPath = env.ContentRootPath;
}

IWebHostEnvironmentözel ara yazılım oluşturulurken yöntemine Invoke eklenebilir:

public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Configure middleware for Development
    }
    else
    {
        // Configure middleware for Staging/Production
    }

    var contentRootPath = env.ContentRootPath;
}

IHostApplicationLifetime arabirimi

IHostApplicationLifetime başlatma ve kapatma sonrası etkinliklere izin verir. Arabirimdeki üç özellik, başlatma ve kapatma olaylarını tanımlayan yöntemleri kaydetmek Action için kullanılan iptal belirteçleridir.

İptal Belirteci Tetiklendiğinde...
ApplicationStarted Ana bilgisayar tamamen başlatıldı.
ApplicationStopped Konak düzgün bir kapatma işlemini tamamlar. Tüm istekler işlenmelidir. Bu olay tamamlanana kadar kapatma blokları.
ApplicationStopping Konak düzgün bir kapatma işlemi gerçekleştiriyor. İstekler hala işleniyor olabilir. Bu olay tamamlanana kadar kapatma blokları.
public class Startup
{
    public void Configure(IApplicationBuilder app, IHostApplicationLifetime appLifetime)
    {
        appLifetime.ApplicationStarted.Register(OnStarted);
        appLifetime.ApplicationStopping.Register(OnStopping);
        appLifetime.ApplicationStopped.Register(OnStopped);

        Console.CancelKeyPress += (sender, eventArgs) =>
        {
            appLifetime.StopApplication();
            // Don't terminate the process immediately, wait for the Main thread to exit gracefully.
            eventArgs.Cancel = true;
        };
    }

    private void OnStarted()
    {
        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        // Perform post-stopped activities here
    }
}

StopApplication uygulamanın sonlandırılmasına yönelik istekte bulunur. Aşağıdaki sınıf, sınıfın yöntemi çağrıldığında Shutdown bir uygulamayı düzgün bir şekilde kapatmak için kullanırStopApplication:

public class MyClass
{
    private readonly IHostApplicationLifetime _appLifetime;

    public MyClass(IHostApplicationLifetime appLifetime)
    {
        _appLifetime = appLifetime;
    }

    public void Shutdown()
    {
        _appLifetime.StopApplication();
    }
}

Kapsam doğrulaması

CreateDefaultBuildertrue, uygulamanın ortamının Geliştirme olup olmadığını ayarlarServiceProviderOptions.ValidateScopes.

ValidateScopes olarak ayarlandığındatrue, varsayılan hizmet sağlayıcısı şunları doğrulamak için denetimler gerçekleştirir:

  • Kapsamı belirlenmiş hizmetler kök hizmet sağlayıcısından doğrudan veya dolaylı olarak çözümlenmez.
  • Kapsamı belirlenmiş hizmetler doğrudan veya dolaylı olarak tekillere eklenmez.

Kök hizmet sağlayıcısı çağrıldığında BuildServiceProvider oluşturulur. Kök hizmet sağlayıcısının ömrü, sağlayıcı uygulamayla başladığında uygulamanın/sunucunun ömrüne karşılık gelir ve uygulama kapatıldığında atılır.

Kapsamı belirlenmiş hizmetler, bunları oluşturan kapsayıcı tarafından atılır. Kök kapsayıcıda kapsamlı bir hizmet oluşturulursa, hizmetin kullanım ömrü etkili bir şekilde singleton olarak yükseltilir çünkü yalnızca uygulama/sunucu kapatıldığında kök kapsayıcı tarafından atılır. Hizmet kapsamlarını doğrulamak çağrıldığında BuildServiceProvider bu durumları yakalar.

Üretim ortamı dahil olmak üzere kapsamları her zaman doğrulamak için öğesini konak oluşturucusunda ile UseDefaultServiceProvider yapılandırınServiceProviderOptions:

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

Ek kaynaklar