ASP.NET Core'da uygulama başlatma

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Gönderen Rick Anderson

Web şablonlarıyla oluşturulan ASP.NET Core uygulamaları, Program.cs dosyasındaki uygulama başlangıç kodunu içerir.

Blazor Bu makaledeki yönergeleri ekleyen veya yerine geçen başlangıç kılavuzu için bkz. ASP.NET Core Blazor başlatma.

Aşağıdaki uygulama başlangıç kodu aşağıdakileri destekler:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

EventSource kullanan uygulamalar, başlangıç performansını anlamak ve iyileştirmek için başlangıç süresini ölçebilir. ServerReady içindeki Microsoft.AspNetCore.Hosting olayı, sunucunun isteklere yanıt vermeye hazır olduğu noktayı temsil eder.

Uygulama başlatma hakkında daha fazla bilgi için bkz . ASP.NET Temel bilgilere genel bakış.

Başlangıç filtreleriyle Başlangıç'ı genişletme

IStartupFilter kullanın:

  • Bir uygulamanın ara yazılım işlem hattının başında veya sonunda ara yazılımı açık bir çağrı olmadan yapılandırmak için Use{Middleware}. Varsayılan ara yazılımı açıkça kaydetmeden işlem hattının başına varsayılan değerleri eklemek için kullanın IStartupFilter . IStartupFilter farklı bir bileşenin uygulama yazarı adına arama Use{Middleware} yapmasına izin verir.
  • Yöntemlerden oluşan Configure bir işlem hattı oluşturmak için. IStartupFilter.Configure , kitaplıklar tarafından eklenen ara yazılımdan önce veya sonra çalışacak bir ara yazılım ayarlayabilir.

IStartupFilterConfigure, alır ve döndürür Action<IApplicationBuilder>uygular. , IApplicationBuilder bir uygulamanın istek işlem hattını yapılandırmak için bir sınıf tanımlar. Daha fazla bilgi için bkz . IApplicationBuilder ile ara yazılım işlem hattı oluşturma.

Her IStartupFilter biri istek işlem hattına bir veya daha fazla ara yazılım ekleyebilir. Filtreler, hizmet kapsayıcısına eklendikleri sırayla çağrılır. Filtreler, denetimi bir sonraki filtreye geçirmeden önce veya sonra ara yazılım ekleyebilir, bu nedenle uygulama işlem hattının başına veya sonuna eklenir.

Aşağıdaki örnekte ile IStartupFilterara yazılım kaydetme işlemi gösterilmektedir. Ara yazılım, RequestSetOptionsMiddleware sorgu dizesi parametresinden bir seçenek değeri ayarlar:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddleware sınıfında yapılandırılırRequestSetOptionsStartupFilter:

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

IStartupFilter içinde kayıtlıdırProgram.cs:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

için option bir sorgu dizesi parametresi sağlandığında ara yazılım, ASP.NET Core ara yazılımı yanıtı işlemeden önce değer atamasını işler:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Ara yazılım yürütme sırası, kayıtların IStartupFilter sırasına göre ayarlanır:

  • Birden çok IStartupFilter uygulama aynı nesnelerle etkileşime geçebilir. Sıralama önemliyse, hizmet kayıtlarını ara yazılımlarının çalışması gereken siparişle eşleşecek şekilde sipariş IStartupFilter edin.

  • Kitaplıklar, ile kaydedilen diğer uygulama ara yazılımından önce veya sonra çalışan bir veya daha fazla IStartupFilter uygulamayla IStartupFilterara yazılım ekleyebilir. Kitaplığın IStartupFilter tarafından eklenen ara yazılımdan önce ara yazılımı çağırmak IStartupFilteriçin:

    • Kitaplık hizmet kapsayıcısına eklenmeden önce hizmet kaydını konumlandırın.
    • Daha sonra çağırmak için, kitaplık eklendikten sonra hizmet kaydını konumlandırın.

Not: ASP.NET Core uygulamasını geçersiz kıldığınızda Configuregenişletemezsiniz. Daha fazla bilgi için bu GitHub sorununa bakın.

Dış derlemeden başlangıçta yapılandırma ekleme

Uygulama IHostingStartup , uygulamanın dosyasının dışındaki bir dış derlemeden başlangıçta uygulamaya Program.cs iyileştirmeler eklemeye olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Başlatma, YapılandırmaHizmetleri ve Yapılandırma

ve Configure yöntemlerini en düşük barındırma modeliyle kullanma ConfigureServices hakkında bilgi için bkz:

Web şablonlarıyla oluşturulan ASP.NET Core uygulamaları, Program.cs dosyasındaki uygulama başlangıç kodunu içerir.

Aşağıdaki uygulama başlangıç kodu aşağıdakileri destekler:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Uygulama başlatma hakkında daha fazla bilgi için bkz . ASP.NET Temel bilgilere genel bakış.

Başlangıç filtreleriyle Başlangıç'ı genişletme

IStartupFilter kullanın:

  • Bir uygulamanın ara yazılım işlem hattının başında veya sonunda ara yazılımı açık bir çağrı olmadan yapılandırmak için Use{Middleware}. Varsayılan ara yazılımı açıkça kaydetmeden işlem hattının başına varsayılan değerleri eklemek için kullanın IStartupFilter . IStartupFilter farklı bir bileşenin uygulama yazarı adına arama Use{Middleware} yapmasına izin verir.
  • Yöntemlerden oluşan Configure bir işlem hattı oluşturmak için. IStartupFilter.Configure , kitaplıklar tarafından eklenen ara yazılımdan önce veya sonra çalışacak bir ara yazılım ayarlayabilir.

IStartupFilterConfigure, alır ve döndürür Action<IApplicationBuilder>uygular. , IApplicationBuilder bir uygulamanın istek işlem hattını yapılandırmak için bir sınıf tanımlar. Daha fazla bilgi için bkz . IApplicationBuilder ile ara yazılım işlem hattı oluşturma.

Her IStartupFilter biri istek işlem hattına bir veya daha fazla ara yazılım ekleyebilir. Filtreler, hizmet kapsayıcısına eklendikleri sırayla çağrılır. Filtreler, denetimi bir sonraki filtreye geçirmeden önce veya sonra ara yazılım ekleyebilir, bu nedenle uygulama işlem hattının başına veya sonuna eklenir.

Aşağıdaki örnekte ile IStartupFilterara yazılım kaydetme işlemi gösterilmektedir. Ara yazılım, RequestSetOptionsMiddleware sorgu dizesi parametresinden bir seçenek değeri ayarlar:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddleware sınıfında yapılandırılırRequestSetOptionsStartupFilter:

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

IStartupFilter içinde kayıtlıdırProgram.cs:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

için option bir sorgu dizesi parametresi sağlandığında ara yazılım, ASP.NET Core ara yazılımı yanıtı işlemeden önce değer atamasını işler:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Ara yazılım yürütme sırası, kayıtların IStartupFilter sırasına göre ayarlanır:

  • Birden çok IStartupFilter uygulama aynı nesnelerle etkileşime geçebilir. Sıralama önemliyse, hizmet kayıtlarını ara yazılımlarının çalışması gereken siparişle eşleşecek şekilde sipariş IStartupFilter edin.

  • Kitaplıklar, ile kaydedilen diğer uygulama ara yazılımından önce veya sonra çalışan bir veya daha fazla IStartupFilter uygulamayla IStartupFilterara yazılım ekleyebilir. Kitaplığın IStartupFilter tarafından eklenen ara yazılımdan önce ara yazılımı çağırmak IStartupFilteriçin:

    • Kitaplık hizmet kapsayıcısına eklenmeden önce hizmet kaydını konumlandırın.
    • Daha sonra çağırmak için, kitaplık eklendikten sonra hizmet kaydını konumlandırın.

Not: ASP.NET Core uygulamasını geçersiz kıldığınızda Configuregenişletemezsiniz. Daha fazla bilgi için bu GitHub konusuna bakın.

Dış derlemeden başlangıçta yapılandırma ekleme

Uygulama IHostingStartup , uygulamanın dosyasının dışındaki bir dış derlemeden başlangıçta uygulamaya Program.cs iyileştirmeler eklemeye olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Startup sınıfı hizmetleri ve uygulamanın istek işlem hattını yapılandırmaktadır.

Başlangıç sınıfı

ASP.NET Core uygulamaları, kural tarafından adlandırılan Startup bir Startup sınıf kullanır. Startup sınıfı:

  • İsteğe bağlı olarak, uygulamanın hizmetlerini yapılandırmak için bir ConfigureServices yöntem içerir. Hizmet, uygulama işlevselliği sağlayan yeniden kullanılabilir bir bileşendir. Hizmetler uygulamasına ConfigureServices kaydedilir ve bağımlılık ekleme (DI) veya ApplicationServicesaracılığıyla uygulama genelinde tüketilir.
  • Uygulamanın istek işleme işlem hattını oluşturmak için bir Configure yöntem içerir.

ConfigureServices ve Configure uygulama başlatıldığında ASP.NET Core çalışma zamanı tarafından çağrılır:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Yukarıdaki örnek Sayfalar içindirRazor; MVC sürümü benzerdir.

Sınıfı Startup , uygulamanın konağı oluşturulduğunda belirtilir. Startup sınıfı genellikle konak oluşturucusunun WebHostBuilderExtensions.UseStartup/<TStartup> yöntemini çağırarak belirtilir:

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Konak, sınıf oluşturucusunun Startup kullanabileceği hizmetler sağlar. Uygulama aracılığıyla ConfigureServicesek hizmetler ekler. Hem konak hem de uygulama hizmetleri uygulamada ve uygulama genelinde kullanılabilir Configure .

Genel Ana Bilgisayar (IHostBuilder) kullanılırken oluşturucuya Startup yalnızca aşağıdaki hizmet türleri eklenebilir:

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
        }
        else
        {
        }
    }
}

Yöntem çağrılana Configure kadar çoğu hizmet kullanılamaz.

Birden Çok Başlangıç

Uygulama farklı ortamlar için ayrı Startup sınıflar tanımladığında (örneğin, StartupDevelopment), çalışma zamanında uygun Startup sınıf seçilir. Ad soneki geçerli ortamla eşleşen sınıf önceliklendirilir. Uygulama Geliştirme ortamında çalıştırılırsa ve hem sınıf Startup hem de sınıf StartupDevelopment içeriyorsa, StartupDevelopment sınıfı kullanılır. Daha fazla bilgi için bkz . Birden çok ortam kullanma.

Konak hakkında daha fazla bilgi için bkz. Konak. Başlatma sırasındaki hataları işleme hakkında bilgi için bkz . Başlangıç özel durum işleme.

ConfigureServices yöntemi

Yöntemi ConfigureServices şu şekildedir:

  • isteğe bağlı.
  • Uygulamanın hizmetlerini yapılandırmak için yönteminden Configure önce konak tarafından çağrılır.
  • Yapılandırma seçeneklerinin kurala göre ayarlandığı yer.

Konak, yöntemler çağrılmadan önce Startup bazı hizmetleri yapılandırabilir. Daha fazla bilgi için bkz . Konak.

Önemli kurulum gerektiren özellikler için üzerinde IServiceCollectionuzantı yöntemleri vardırAdd{Service}. Örneğin, DbContext Ekle, DefaultIdentity Ekle, EntityFrameworkStores Ekleve RazorPages Ekle:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(
            options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddRazorPages();
    }

Hizmet kapsayıcısına hizmet eklemek, bunların uygulama içinde ve yönteminde Configure kullanılabilir olmasını sağlar. Hizmetler, bağımlılık ekleme veya öğesinden ApplicationServicesçözümlenir.

Configure yöntemi

Configure yöntemi, uygulamanın HTTP isteklerine nasıl yanıt vereceğini belirtmek için kullanılır. İstek işlem hattı, bir IApplicationBuilder örneğe ara yazılım bileşenleri eklenerek yapılandırılır. IApplicationBuilder yöntemi tarafından Configure kullanılabilir, ancak hizmet kapsayıcısında kayıtlı değildir. Barındırma bir IApplicationBuilder oluşturur ve doğrudan öğesine Configuregeçirir.

ASP.NET Core şablonları işlem hattını aşağıdakiler için destekle yapılandırmaktadır:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Yukarıdaki örnek Sayfalar içindirRazor; MVC sürümü benzerdir.

Her Use uzantı yöntemi, istek işlem hattına bir veya daha fazla ara yazılım bileşeni ekler. Örneğin, ara yazılımı statik dosyalara hizmet vermek üzere yapılandırır. UseStaticFiles

İstek işlem hattındaki her ara yazılım bileşeni, uygunsa işlem hattında sonraki bileşeni çağırmaktan veya zinciri kısa devreden sorumludur.

yöntem imzasında Configure , ILoggerFactoryveya içinde tanımlanan ConfigureServicesherhangi bir şey gibi IWebHostEnvironmentek hizmetler belirtilebilir. Bu hizmetler kullanılabilir durumdaysa eklenir.

Nasıl kullanılacağı IApplicationBuilder ve ara yazılım işleme sırası hakkında daha fazla bilgi için bkz . ASP.NET Core Ara Yazılımı.

Başlatma olmadan hizmetleri yapılandırma

Hizmetleri ve istek işleme işlem hattını sınıf Startup kullanmadan yapılandırmak için konak oluşturucusunun çağrı ConfigureServices ve Configure kolaylık yöntemlerini çağırın. Birbirinin sonuna ConfigureServices eklenecek birden çok çağrı. Birden çok Configure yöntem çağrısı varsa, son Configure çağrı kullanılır.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices(services =>
                {
                    services.AddControllersWithViews();
                })
                .Configure(app =>
                {
                    var loggerFactory = app.ApplicationServices
                        .GetRequiredService<ILoggerFactory>();
                    var logger = loggerFactory.CreateLogger<Program>();
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    var config = app.ApplicationServices.GetRequiredService<IConfiguration>();

                    logger.LogInformation("Logged in Configure");

                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }
                    else
                    {
                        app.UseExceptionHandler("/Home/Error");
                        app.UseHsts();
                    }

                    var configValue = config["MyConfigKey"];
                });
            });
        });
}

Başlangıç filtreleriyle Başlangıç'ı genişletme

IStartupFilter kullanın:

  • Bir uygulamanın Ara yazılım işlem hattını açık bir çağrısı olmadan yapılandırma işleminin başında veya sonunda ara yazılımı yapılandırmak için Use{Middleware}. IStartupFilter ASP.NET Core tarafından, uygulama yazarının varsayılan ara yazılımı açıkça kaydetmesine gerek kalmadan işlem hattının başına varsayılan değerler eklemek için kullanılır. IStartupFilter farklı bir bileşenin uygulama yazarı adına arama Use{Middleware} yapmasına izin verir.
  • Yöntemlerden oluşan Configure bir işlem hattı oluşturmak için. IStartupFilter.Configure , kitaplıklar tarafından eklenen ara yazılımdan önce veya sonra çalışacak bir ara yazılım ayarlayabilir.

IStartupFilterConfigure, alır ve döndürür Action<IApplicationBuilder>uygular. , IApplicationBuilder bir uygulamanın istek işlem hattını yapılandırmak için bir sınıf tanımlar. Daha fazla bilgi için bkz . IApplicationBuilder ile ara yazılım işlem hattı oluşturma.

Her IStartupFilter biri istek işlem hattına bir veya daha fazla ara yazılım ekleyebilir. Filtreler, hizmet kapsayıcısına eklendikleri sırayla çağrılır. Filtreler, denetimi bir sonraki filtreye geçirmeden önce veya sonra ara yazılım ekleyebilir, bu nedenle uygulama işlem hattının başına veya sonuna eklenir.

Aşağıdaki örnekte ile IStartupFilterara yazılım kaydetme işlemi gösterilmektedir. Ara yazılım, RequestSetOptionsMiddleware sorgu dizesi parametresinden bir seçenek değeri ayarlar:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware( RequestDelegate next )
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddleware sınıfında yapılandırılırRequestSetOptionsStartupFilter:

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

içindeki IStartupFilter hizmet kapsayıcısında ConfigureServiceskayıtlıdır.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext, config) =>
           {
           })
         .ConfigureWebHostDefaults(webBuilder =>
         {
             webBuilder.UseStartup<Startup>();
         })
        .ConfigureServices(services =>
        {
            services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();
        });
}

için option bir sorgu dizesi parametresi sağlandığında ara yazılım, ASP.NET Core ara yazılımı yanıtı işlemeden önce değer atamasını işler.

Ara yazılım yürütme sırası, kayıtların IStartupFilter sırasına göre ayarlanır:

  • Birden çok IStartupFilter uygulama aynı nesnelerle etkileşime geçebilir. Sıralama önemliyse, hizmet kayıtlarını ara yazılımlarının çalışması gereken siparişle eşleşecek şekilde sipariş IStartupFilter edin.

  • Kitaplıklar, ile kaydedilen diğer uygulama ara yazılımından önce veya sonra çalışan bir veya daha fazla IStartupFilter uygulamayla IStartupFilterara yazılım ekleyebilir. Kitaplığın IStartupFilter tarafından eklenen ara yazılımdan önce ara yazılımı çağırmak IStartupFilteriçin:

    • Kitaplık hizmet kapsayıcısına eklenmeden önce hizmet kaydını konumlandırın.
    • Daha sonra çağırmak için, kitaplık eklendikten sonra hizmet kaydını konumlandırın.

Dış derlemeden başlangıçta yapılandırma ekleme

Bir IHostingStartup uygulaması, uygulamanın Startup sınıfı dışındaki bir dış derlemeden başlangıçta bir uygulamaya geliştirmeler eklemeye izin verir. Daha fazla bilgi için, bkz. ASP.NET Core'da barındırma başlangıç derlemelerini kullanma.

Ek kaynaklar