ASP.NET Core Ara Yazılımı

Rick Anderson ve Steve Smith tarafından

Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama işlem hattında birleştirilmiş yazılımdır. Her bileşen:

  • İsteğin işlem hattındaki bir sonraki bileşene geçirilip geçirileceğini seçer.
  • İşlem hattındaki bir sonraki bileşenden önce ve sonra iş gerçekleştirebilir.

İstek temsilcileri, istek işlem hattını oluşturmak için kullanılır. İstek temsilcileri her HTTP isteğini işler.

İstek temsilcileri , Mapve Use uzantı yöntemleri kullanılarak Runyapılandırılır. Tek bir istek temsilcisi, anonim bir yöntem (satır içi ara yazılım olarak adlandırılır) olarak satır içinde belirtilebilir veya yeniden kullanılabilir bir sınıfta tanımlanabilir. Bu yeniden kullanılabilir sınıflar ve satır içi anonim yöntemler ara yazılım bileşenleri olarak da adlandırılan ara yazılımdır. İstek işlem hattındaki her ara yazılım bileşeni, işlem hattında sonraki bileşeni çağırmaktan veya işlem hattını kısa devreden sorumludur. Ara yazılım kısa devreleri kullanıldığında, başka ara yazılımların isteği işlemesini önlediğinden buna terminal ara yazılımı denir.

HTTP işleyicilerini ve modüllerini ASP.NET Core ara yazılıma geçirme, ASP.NET Core ve ASP.NET 4.x'teki istek işlem hatları arasındaki farkı açıklar ve ek ara yazılım örnekleri sağlar.

Ara yazılım kod analizi

ASP.NET Core, uygulama kodunu kalite açısından inceleyen birçok derleyici platformu çözümleyicisi içerir. Daha fazla bilgi için bkz. ASP.NET Core uygulamalarında kod analizi

ile ara yazılım işlem hattı oluşturma WebApplication

ASP.NET Core istek işlem hattı, ardı ardına çağrılan bir dizi istek temsilcisinden oluşur. Aşağıdaki diyagramda kavramı gösterilmektedir. Yürütme dizisi siyah okları izler.

Bir isteğin gelişini, üç ara yazılım aracılığıyla işlenmesini ve yanıtın uygulamadan ayrıldığını gösteren istek işleme düzeni. Her ara yazılım kendi mantığını çalıştırır ve isteği next() deyiminde bir sonraki ara yazılıma bırakır. Üçüncü ara yazılım isteği işledikten sonra istek, uygulamayı istemciye yanıt olarak bırakmadan önce next() deyimlerinden sonra ek işlemler için önceki iki ara yazılımdan ters sırayla geri geçer.

Her temsilci, sonraki temsilciden önce ve sonra işlemler gerçekleştirebilir. Özel durum işleme temsilcileri, işlem hattının sonraki aşamalarında oluşan özel durumları yakalayabilmeleri için işlem hattının erken aşamalarında çağrılmalıdır.

Mümkün olan en basit ASP.NET Core uygulaması, tüm istekleri işleyen tek bir istek temsilcisi ayarlar. Bu olay gerçek bir istek işlem hattı içermez. Bunun yerine, her HTTP isteğine yanıt olarak tek bir anonim işlev çağrılır.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello world!");
});

app.Run();

Birden çok istek temsilcisini ile birlikte zincirleme Use. parametresi, next işlem hattındaki bir sonraki temsilciyi temsil eder. parametresini çağırmayarak işlem hattını kısa devre yapabilirsiniz next . Aşağıdaki örnekte gösterildiği gibi, genellikle temsilciden next önce ve sonra eylemler gerçekleştirebilirsiniz:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Use(async (context, next) =>
{
    // Do work that can write to the Response.
    await next.Invoke();
    // Do logging or other work that doesn't write to the Response.
});

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from 2nd delegate.");
});

app.Run();

Bir temsilci bir sonraki temsilciye bir istek iletmediğinde, istek işlem hattının kısa devresini ayarlamak olarak adlandırılır. Kısa devre genellikle gereksiz çalışmayı önlediğinden tercih edilir. Örneğin, Statik Dosya Ara Yazılımı bir statik dosya isteğini işleyerek ve işlem hattının geri kalanını kısa devre yaparak terminal ara yazılımı olarak görev yapabilir. Daha fazla işlemeyi sonlandıran ara yazılımdan önce işlem hattına eklenen ara yazılım, deyimlerinden next.Invoke sonra kodu işlemeye devam eder. Ancak, daha önce gönderilmiş bir yanıta yazma girişimiyle ilgili aşağıdaki uyarıya bakın.

Uyarı

Yanıt istemciye gönderildikten sonra aramayın next.Invoke . Yanıt başlatıldıktan sonra olarak HttpResponse yapılan değişiklikler bir özel durum oluşturur. Örneğin, üst bilgileri ve durum kodunu ayarlamak bir özel durum oluşturur. çağrısından nextsonra yanıt gövdesine yazılıyor:

  • Protokol ihlaline neden olabilir. Örneğin, belirtilenden Content-Lengthdaha fazla yazma.
  • Gövde biçimini bozabilir. Örneğin, CSS dosyasına HTML alt bilgisi yazma.

HasStarted üst bilgilerin gönderilip gönderilmediğini veya gövdenin yazıldığını belirtmek için yararlı bir ipucudur.

Run temsilciler parametre next almaz. İlk Run temsilci her zaman terminaldir ve işlem hattını sonlandırır. Run bir kuraldır. Bazı ara yazılım bileşenleri, işlem hattının sonunda çalışan yöntemleri kullanıma sunabilir Run[Middleware] :

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Use(async (context, next) =>
{
    // Do work that can write to the Response.
    await next.Invoke();
    // Do logging or other work that doesn't write to the Response.
});

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from 2nd delegate.");
});

app.Run();

Kod açıklamalarının İngilizce dışındaki dillere çevrildiğini görmek isterseniz , bu GitHub tartışma sorununda bize bildirin.

Yukarıdaki örnekte, Run temsilci yanıta yazar "Hello from 2nd delegate." ve ardından işlem hattını sonlandırır. Temsilcinin Run arkasına başka bir Use temsilci veya Run temsilci eklenirse çağrılmıyordur.

Uygulamayı tercih edin. Bağlamın sonrakine geçirilmesini gerektiren aşırı yükleme kullanın

Ayırmayan uygulama. Uzantı yöntemini kullanın:

  • bağlamın 'a geçirilmesini nextgerektirir.
  • Diğer aşırı yükleme kullanılırken gerekli olan iki iç istek başına ayırmayı kaydeder.

Daha fazla bilgi için bu GitHub sorununa bakın.

Ara yazılım sırası

Aşağıdaki diyagramda, ASP.NET Core MVC ve Razor Pages uygulamaları için tam istek işleme işlem hattı gösterilmektedir. Tipik bir uygulamada mevcut ara yazılımların nasıl sıralandığı ve özel ara yazılımların nereye eklendiğini görebilirsiniz. Mevcut ara yazılımları yeniden sıralama veya senaryolarınız için gerekli olan yeni özel ara yazılımları ekleme konusunda tam denetime sahipsiniz.

ara yazılım işlem hattını ASP.NET Core

Önceki diyagramdaki Uç nokta ara yazılımı, ilgili uygulama türü (MVC veya Razor Sayfalar) için filtre işlem hattını yürütür.

Önceki diyagramdaki Yönlendirme ara yazılımı Statik Dosyalar'ın ardından gösterilir. Bu, proje şablonlarının uygulamayı açıkça çağırarak uyguladığı sıradır . UseRouting. çağrısı app.UseRoutingyapmazsanız , Yönlendirme ara yazılımı varsayılan olarak işlem hattının başında çalışır. Daha fazla bilgi için bkz . Yönlendirme.

filtre işlem hattını ASP.NET Core

Ara yazılım bileşenlerinin dosyaya Program.cs eklenme sırası, ara yazılım bileşenlerinin isteklerde çağrılma sırasını ve yanıtın ters sırasını tanımlar. Sıralama güvenlik, performans ve işlevsellik açısından kritik öneme sahiptir.

içindeki aşağıdaki vurgulanan kod Program.cs , güvenlikle ilgili ara yazılım bileşenlerini tipik önerilen sırayla ekler:

using IndividualAccountsExample.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
// app.UseCookiePolicy();

app.UseRouting();
// app.UseRequestLocalization();
// app.UseCors();

app.UseAuthentication();
app.UseAuthorization();
// app.UseSession();
// app.UseResponseCompression();
// app.UseResponseCaching();

app.MapRazorPages();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Yukarıdaki kodda:

  • Tek tek kullanıcı hesaplarıyla yeni bir web uygulaması oluşturulurken eklenmemiş ara yazılım açıklama satırı yapılır.
  • Her ara yazılım tam olarak bu sırada görünmez, ancak çoğu öyledir. Örnek:
    • UseCors, UseAuthenticationve UseAuthorization gösterilen sırada görünmelidir.
    • UseCors şu anda öncesinde UseResponseCachinggörünmelidir. Bu gereksinim GitHub sorunu dotnet/aspnetcore #23218'de açıklanmıştır.
    • UseRequestLocalization , istek kültürünü denetleyebilen herhangi bir ara yazılımdan önce görünmelidir (örneğin, app.UseMvcWithDefaultRoute()).

Bazı senaryolarda ara yazılımların farklı sıralamaları vardır. Örneğin, önbelleğe alma ve sıkıştırma sıralama senaryoya özgüdür ve birden çok geçerli sıralama vardır. Örnek:

app.UseResponseCaching();
app.UseResponseCompression();

Yukarıdaki kodla, sıkıştırılmış yanıtı önbelleğe alarak CPU kullanımı azaltılabilir, ancak Gzip veya Brotli gibi farklı sıkıştırma algoritmalarını kullanarak bir kaynağın birden çok gösterimini önbelleğe alabilirsiniz.

Aşağıdaki sıralama, sıkıştırılmış statik dosyaların önbelleğe alınmasını sağlamak için statik dosyaları birleştirir:

app.UseResponseCaching();
app.UseResponseCompression();
app.UseStaticFiles();

Aşağıdaki Program.cs kod, yaygın uygulama senaryoları için ara yazılım bileşenleri ekler:

  1. Özel durum/hata işleme
    • Uygulama Geliştirme ortamında çalıştırıldığında:
      • Geliştirici Özel Durum Sayfası Ara Yazılımı (UseDeveloperExceptionPage) uygulama çalışma zamanı hatalarını bildirir.
      • Veritabanı Hata Sayfası Ara Yazılımı (UseDatabaseErrorPage) veritabanı çalışma zamanı hatalarını bildirir.
    • Uygulama Üretim ortamında çalıştırıldığında:
      • Özel Durum İşleyicisi Ara Yazılımı (UseExceptionHandler), aşağıdaki ara yazılımlarda oluşan özel durumları yakalar.
      • HTTP Strict Transport Security Protocol (HSTS) Ara Yazılımı (UseHsts) üst bilgisini ekler Strict-Transport-Security .
  2. HTTPS Yeniden Yönlendirme Ara Yazılımı (UseHttpsRedirection), HTTP isteklerini HTTPS'ye yönlendirir.
  3. Statik Dosya Ara Yazılımı (UseStaticFiles), statik dosyaları ve kısa devreleri daha fazla istek işlemesi döndürür.
  4. Cookie İlke Ara Yazılımı (UseCookiePolicy), uygulamayı AB Genel Veri Koruma Yönetmeliği (GDPR) düzenlemelerine uygun olarak kabul eder.
  5. Yönlendirme ara yazılımı (UseRouting) istekleri yönlendirmek için.
  6. Kimlik Doğrulama Ara Yazılımı (UseAuthentication), güvenli kaynaklara erişim izni verilmeden önce kullanıcının kimliğini doğrulamayı dener.
  7. Yetkilendirme Ara Yazılımı (UseAuthorization), kullanıcının güvenli kaynaklara erişmesini sağlar.
  8. Oturum Ara Yazılımı (UseSession), oturum durumunu oluşturur ve korur. Uygulama oturum durumunu kullanıyorsa, İlke Ara Yazılımı'nın ardından Cookie ve MVC Ara Yazılımı'nın öncesinde Oturum Ara Yazılımı'nı çağırın.
  9. İstek işlem hattına Pages uç noktaları eklemek Razor için Uç Nokta Yönlendirme Ara Yazılımı (UseEndpoints ileMapRazorPages).
if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.MapRazorPages();

Yukarıdaki örnek kodda, her ara yazılım uzantısı yöntemi ad alanı üzerinden Microsoft.AspNetCore.Builder kullanıma WebApplicationBuilder sunulur.

UseExceptionHandler işlem hattına eklenen ilk ara yazılım bileşenidir. Bu nedenle, Özel Durum İşleyici Ara Yazılımı sonraki çağrılarda oluşan özel durumları yakalar.

Statik Dosya Ara Yazılımı, istekleri ve kısa devreyi kalan bileşenlerden geçmeden işleyebilmesi için işlem hattının başında çağrılır. Statik Dosya Ara Yazılımı yetkilendirme denetimi sağlamaz . Wwwroot kapsamındakiler de dahil olmak üzere Statik Dosya Ara Yazılımı tarafından sunulan tüm dosyalar genel kullanıma açıktır. Statik dosyaların güvenliğini sağlama yaklaşımı için bkz. ASP.NET Core statik dosyalar.

İstek Statik Dosya Ara Yazılımı tarafından işlenmezse, kimlik doğrulamasını gerçekleştiren Kimlik Doğrulama Ara Yazılımına ()UseAuthentication geçirilir. Kimlik doğrulaması kimliği doğrulanmamış istekleri kısa devre yapmaz. Kimlik Doğrulama Ara Yazılımı isteklerin kimliğini doğrulasa da, yetkilendirme (ve reddetme) yalnızca MVC belirli Razor bir Sayfayı veya MVC denetleyicisini ve eylemini seçtikten sonra gerçekleşir.

Aşağıdaki örnekte, Statik Dosya Ara Yazılımı tarafından Yanıt Sıkıştırma Ara Yazılımı öncesinde statik dosya isteklerinin işlendiği bir ara yazılım sırası gösterilmektedir. Statik dosyalar bu ara yazılım sırası ile sıkıştırılamaz. Razor Sayfalar yanıtları sıkıştırılabilir.

// Static files aren't compressed by Static File Middleware.
app.UseStaticFiles();

app.UseRouting();

app.UseResponseCompression();

app.MapRazorPages();

Tek Sayfalı Uygulamalar hakkında bilgi için React ve Angular proje şablonlarının kılavuzlarını inceleyin.

UseCors ve UseStaticFiles sırası

Arama UseCors sırası ve UseStaticFiles uygulamaya bağlıdır. Daha fazla bilgi için bkz . UseCors ve UseStaticFiles sırası

İletilen Üst Bilgiler Ara Yazılım sırası

İletilen Üst Bilgiler Ara Yazılımı diğer ara yazılımlardan önce çalıştırılmalıdır. Bu sıralama, iletilen üst bilgi bilgilerini kullanan ara yazılımların işlenmek üzere üst bilgi değerlerini tüketmesini sağlar. Tanılama ve hata işleme ara yazılımından sonra İletilen Üst Bilgiler Ara Yazılımını çalıştırmak için bkz. İletilen Üst Bilgiler Ara Yazılımı sırası.

Ara yazılım işlem hattını dallanma

Map uzantılar, işlem hattını dallanma kuralı olarak kullanılır. Map belirtilen istek yolunun eşleşmelerine göre istek işlem hattını dallar. İstek yolu verilen yol ile başlıyorsa dal yürütülür.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Map("/map1", HandleMapTest1);

app.Map("/map2", HandleMapTest2);

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});

app.Run();

static void HandleMapTest1(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map Test 1");
    });
}

static void HandleMapTest2(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map Test 2");
    });
}

Aşağıdaki tabloda, önceki kodun kullanılmasından gelen http://localhost:1234 istekler ve yanıtlar gösterilmektedir.

İstek Yanıt
localhost:1234 Eşleme dışı temsilciden merhaba.
localhost:1234/map1 Harita Testi 1
localhost:1234/map2 Harita Testi 2
localhost:1234/map3 Eşleme dışı temsilciden merhaba.

Map Kullanıldığında, eşleşen yol kesimleri her istek için öğesinden HttpRequest.Path kaldırılır ve sonuna HttpRequest.PathBase eklenir.

Map iç içe yerleştirmeyi destekler, örneğin:

app.Map("/level1", level1App => {
    level1App.Map("/level2a", level2AApp => {
        // "/level1/level2a" processing
    });
    level1App.Map("/level2b", level2BApp => {
        // "/level1/level2b" processing
    });
});

Map aynı anda birden çok segmenti de eşleştirebilir:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Map("/map1/seg1", HandleMultiSeg);

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});

app.Run();

static void HandleMultiSeg(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map Test 1");
    });
}

MapWhen belirtilen koşulun sonucuna göre istek işlem hattını dallar. İstekleri işlem hattının yeni bir dalı ile eşlemek için herhangi bir tür Func<HttpContext, bool> koşulu kullanılabilir. Aşağıdaki örnekte, bir sorgu dizesi değişkeninin branchvarlığını algılamak için bir koşul kullanılır:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapWhen(context => context.Request.Query.ContainsKey("branch"), HandleBranch);

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});

app.Run();

static void HandleBranch(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        var branchVer = context.Request.Query["branch"];
        await context.Response.WriteAsync($"Branch used = {branchVer}");
    });
}

Aşağıdaki tabloda, önceki kodun kullanılmasıyla http://localhost:1234 ilgili istekler ve yanıtlar gösterilmektedir:

İstek Yanıt
localhost:1234 Hello from non-Map delegate.
localhost:1234/?branch=main Branch used = main

UseWhen ayrıca verilen koşulun sonucuna göre istek işlem hattını dallar. 'den MapWhenfarklı olarak, bu dal kısa devre yapmıyorsa veya terminal ara yazılımı içermiyorsa ana işlem hattına yeniden katılır:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseWhen(context => context.Request.Query.ContainsKey("branch"),
    appBuilder => HandleBranchAndRejoin(appBuilder));

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
});

app.Run();

void HandleBranchAndRejoin(IApplicationBuilder app)
{
    var logger = app.ApplicationServices.GetRequiredService<ILogger<Program>>(); 

    app.Use(async (context, next) =>
    {
        var branchVer = context.Request.Query["branch"];
        logger.LogInformation("Branch used = {branchVer}", branchVer);

        // Do work that doesn't write to the Response.
        await next();
        // Do other work that doesn't write to the Response.
    });
}

Yukarıdaki örnekte, tüm istekler için bir yanıtı Hello from non-Map delegate. yazılmıştır. İstek bir sorgu dizesi değişkeni branchiçeriyorsa, ana işlem hattı yeniden katılmadan önce değeri günlüğe kaydedilir.

Yerleşik ara yazılım

ASP.NET Core aşağıdaki ara yazılım bileşenleriyle birlikte kullanılır. Order sütunu, istek işleme işlem hattında ara yazılım yerleşimi ve ara yazılımın istek işlemeyi hangi koşullar altında sonlandırabileceği hakkında notlar sağlar. Ara yazılım, istek işleme işlem hattını kısa devreye alıp daha fazla aşağı akış ara yazılımının bir isteği işlemesini önlediğinde, buna terminal ara yazılımı denir. Kısa devre oluşturma hakkında daha fazla bilgi için IApplicationBuilder ile ara yazılım işlem hattı oluşturma bölümüne bakın.

Ara yazılım Description Sipariş
Kimlik Doğrulaması Kimlik doğrulama desteği sağlar. Önce HttpContext.User gereklidir. OAuth geri çağırmaları için terminal.
Yetkilendirme Yetkilendirme desteği sağlar. Kimlik Doğrulama Ara Yazılımı'nın hemen ardından.
Cookie Ilkesi Kişisel bilgileri depolamak için kullanıcıların onaylarını izler ve ve SameSitegibi secure alanlar için cookie en düşük standartları uygular. Bu sorunlara cookieneden olan ara yazılımdan önce. Örnekler: Kimlik Doğrulaması, Oturum, MVC (TempData).
CORS Çıkış Noktaları Arası Kaynak Paylaşımını yapılandırır. CORS kullanan bileşenlerden önce. UseCorsşu anda bu hata nedeniyle daha önce UseResponseCaching gitmelidir.
DeveloperExceptionPage Yalnızca Geliştirme ortamında kullanılması amaçlanan hata bilgilerini içeren bir sayfa oluşturur. Hata oluşturan bileşenlerden önce. Proje şablonları, ortam Geliştirme olduğunda bu ara yazılımı otomatik olarak işlem hattındaki ilk ara yazılım olarak kaydeder.
Tanılama Geliştirici özel durum sayfası, özel durum işleme, durum kodu sayfaları ve yeni uygulamalar için varsayılan web sayfası sağlayan birkaç ayrı ara yazılım. Hata oluşturan bileşenlerden önce. Özel durumlar için terminal veya yeni uygulamalar için varsayılan web sayfasını sunma.
İletilen Üst Bilgiler Proksied üst bilgilerini geçerli isteğe iletir. Güncelleştirilmiş alanları kullanan bileşenlerden önce. Örnekler: scheme, host, client IP, method.
Sistem Durumu Denetimi Bir ASP.NET Core uygulamasının durumunu ve veritabanı kullanılabilirliğini denetleme gibi bağımlılıklarını denetler. Bir istek sistem durumu denetimi uç noktasıyla eşleşiyorsa terminal.
Üst Bilgi Yayma HTTP üst bilgilerini gelen istekten giden HTTP İstemcisi isteklerine yayın.
HTTP Günlüğe Kaydetme HTTP İsteklerini ve Yanıtlarını günlüğe kaydeder. Ara yazılım işlem hattının başında.
HTTP Yöntemini Geçersiz Kılma Gelen POST isteğinin yöntemini geçersiz kılmasına izin verir. Güncelleştirilmiş yöntemi kullanan bileşenlerden önce.
HTTPS Yeniden Yönlendirme Tüm HTTP isteklerini HTTPS'ye yeniden yönlendirin. URL'yi kullanan bileşenlerden önce.
HTTP Katı Aktarım Güvenliği (HSTS) Özel bir yanıt üst bilgisi ekleyen güvenlik geliştirme ara yazılımı. Yanıtlar gönderilmeden önce ve istekleri değiştiren bileşenlerden sonra. Örnekler: İletilen Üst Bilgiler, URL Yeniden Yazma.
MVC MVC/Razor Sayfaları ile istekleri işler. bir istek bir yolla eşleşiyorsa terminal.
OWIN OWIN tabanlı uygulamalar, sunucular ve ara yazılım ile birlikte çalışma. OWIN Ara Yazılımı isteği tam olarak işliyorsa terminal.
Yanıt Önbelleğe Alma Yanıtları önbelleğe alma desteği sağlar. Önbelleğe alma gerektiren bileşenlerden önce. UseCORS önce UseResponseCachinggelmelidir.
Yanıt Sıkıştırma Yanıtları sıkıştırma desteği sağlar. Sıkıştırma gerektiren bileşenlerden önce.
İstek Yerelleştirmesi Yerelleştirme desteği sağlar. Yerelleştirmeye duyarlı bileşenlerden önce. kullanırken RouteDataRequestCultureProviderYönlendirme Ara Yazılımı'nın ardından görünmesi gerekir.
Uç Nokta Yönlendirme İstek yollarını tanımlar ve kısıtlar. Eşleşen yollar için terminal.
SPA Tek Sayfalı Uygulama (SPA) için varsayılan sayfayı döndürerek ara yazılım zincirinde bu noktadan gelen tüm istekleri işler Zincirde geç, böylece statik dosyaları, MVC eylemlerini vb. sunan diğer ara yazılımların öncelikli olması.
Oturum Kullanıcı oturumlarını yönetmek için destek sağlar. Oturum gerektiren bileşenlerden önce.
Statik Dosyalar Statik dosyalar sunmak ve dizine göz atmak için destek sağlar. bir istek bir dosyayla eşleşiyorsa terminal.
URL Yeniden Yazma URL'leri yeniden yazma ve istekleri yeniden yönlendirme desteği sağlar. URL'yi kullanan bileşenlerden önce.
W3CLogging W3C Genişletilmiş Günlük Dosyası Biçiminde sunucu erişim günlükleri oluşturur. Ara yazılım işlem hattının başında.
WebSockets WebSockets protokolunu etkinleştirir. WebSocket isteklerini kabul etmek için gereken bileşenlerden önce.

Ek kaynaklar

Tarafından Rick Anderson ve Steve Smith

Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama işlem hattında birleştirilmiş yazılımdır. Her bileşen:

  • İsteğin işlem hattındaki bir sonraki bileşene geçirilip geçirmeyeceğini seçer.
  • İşlem hattındaki bir sonraki bileşenden önce ve sonra iş gerçekleştirebilir.

İstek temsilcileri, istek işlem hattını oluşturmak için kullanılır. İstek temsilcileri her HTTP isteğini işler.

İstek temsilcileri , Mapve Use uzantı yöntemleri kullanılarak Runyapılandırılır. Tek bir istek temsilcisi, anonim bir yöntem (satır içi ara yazılım olarak adlandırılır) olarak satır içinde belirtilebilir veya yeniden kullanılabilir bir sınıfta tanımlanabilir. Bu yeniden kullanılabilir sınıflar ve satır içi anonim yöntemler ara yazılım bileşenleri olarak da adlandırılan ara yazılımdır. İstek işlem hattındaki her ara yazılım bileşeni, işlem hattında bir sonraki bileşeni çağırmaktan veya işlem hattının kısa devresini kısa devreden sorumludur. Ara yazılım kısa devresi olduğunda, daha fazla ara yazılımın isteği işlemesini önlediği için buna terminal ara yazılımı denir.

HTTP işleyicilerini ve modüllerini ASP.NET Core ara yazılıma geçirme, ASP.NET Core ve ASP.NET 4.x'teki istek işlem hatları arasındaki farkı açıklar ve ek ara yazılım örnekleri sağlar.

IApplicationBuilder ile ara yazılım işlem hattı oluşturma

ASP.NET Core istek işlem hattı, ardı ardına çağrılan bir dizi istek temsilcisinden oluşur. Aşağıdaki diyagramda kavramı gösterilmektedir. Yürütme iş parçacığı siyah okları izler.

Bir isteğin gelişini, üç ara yazılım aracılığıyla işlenmesini ve yanıtın uygulamadan çıkışını gösteren istek işleme düzeni. Her ara yazılım mantığını çalıştırır ve isteği next() deyiminde bir sonraki ara yazılıma bırakır. Üçüncü ara yazılım isteği işledikten sonra istek, uygulamayı istemciye yanıt olarak bırakmadan önce next() deyimlerinden sonra ek işleme için önceki iki ara yazılımdan ters sırayla geri geçer.

Her temsilci, sonraki temsilciden önce ve sonra işlem gerçekleştirebilir. özel durum işleme temsilcileri, işlem hattının sonraki aşamalarında oluşan özel durumları yakalayabilmeleri için işlem hattının başında çağrılmalıdır.

Mümkün olan en basit ASP.NET Core uygulaması, tüm istekleri işleyen tek bir istek temsilcisi ayarlar. Bu durum gerçek bir istek işlem hattı içermez. Bunun yerine, her HTTP isteğine yanıt olarak tek bir anonim işlev çağrılır.

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World!");
        });
    }
}

Birden çok istek temsilcisini ile Usebirlikte zincirleme. parametresi işlem next hattındaki bir sonraki temsilciyi temsil eder. Sonraki parametreyi çağırmayarak işlem hattını kısa devre yapabilirsiniz. Aşağıdaki örnekte gösterildiği gibi, genellikle bir sonraki temsilciden önce ve sonra eylemler gerçekleştirebilirsiniz:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
        });

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from 2nd delegate.");
        });
    }
}

Bir temsilci bir sonraki temsilciye bir istek iletmediğinde, istek işlem hattının kısa devresini oluşturma olarak adlandırılır. Kısa devre genellikle gereksiz çalışmayı önlediğinden tercih edilir. Örneğin, Statik Dosya Ara Yazılımı statik bir dosya için istek işleyerek ve işlem hattının geri kalanını kısa devre yaparak terminal ara yazılımı olarak görev yapabilir. Daha fazla işlemeyi sonlandıran ara yazılımdan önce işlem hattına eklenen ara yazılım, deyimlerinden next.Invoke sonra kodu işlemeye devam eder. Ancak, daha önce gönderilmiş bir yanıta yazma girişimiyle ilgili aşağıdaki uyarıya bakın.

Uyarı

Yanıt istemciye gönderildikten sonra aramayın next.Invoke . Yanıt başlatıldıktan sonra için HttpResponse yapılan değişiklikler bir özel durum oluşturur. Örneğin, üst bilgileri ve durum kodunu ayarlamak bir özel durum oluşturur. çağrısından nextsonra yanıt gövdesine yazılıyor:

  • Protokol ihlaline neden olabilir. Örneğin, belirtilenden Content-Lengthdaha fazla yazma.
  • Gövde biçimini bozabilir. Örneğin, CSS dosyasına HTML alt bilgisi yazma.

HasStarted üst bilgilerin gönderilip gönderilmediğini veya gövdenin yazıldığını göstermek için yararlı bir ipucudur.

Run temsilciler parametre next almaz. İlk Run temsilci her zaman terminaldir ve işlem hattını sonlandırır. Run bir kuraldır. Bazı ara yazılım bileşenleri, işlem hattının sonunda çalışan yöntemleri kullanıma sunabilir Run[Middleware] :

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            // Do work that doesn't write to the Response.
            await next.Invoke();
            // Do logging or other work that doesn't write to the Response.
        });

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from 2nd delegate.");
        });
    }
}

Kod açıklamalarının İngilizce dışındaki dillere çevrildiğini görmek istiyorsanız , bu GitHub tartışma sorununda bize bildirin.

Yukarıdaki örnekte temsilci yanıta Run yazar "Hello from 2nd delegate." ve işlem hattını sonlandırır. Temsilciden Run sonra başka bir Use temsilci veya Run temsilci eklenirse çağrılmıyordur.

Ara yazılım sırası

Aşağıdaki diyagramda ASP.NET Core MVC ve Razor Pages uygulamaları için istek işleme işlem hattının tamamı gösterilmektedir. Tipik bir uygulamada mevcut ara yazılımların nasıl sıralandığı ve özel ara yazılımların nereye eklendiğini görebilirsiniz. Mevcut ara yazılımları yeniden sıralama veya senaryolarınız için gereken yeni özel ara yazılımları ekleme konusunda tam denetime sahipsiniz.

ara yazılım işlem hattını ASP.NET Core

Önceki diyagramdaki Uç nokta ara yazılımı, ilgili uygulama türü (MVC veya Razor Sayfalar) için filtre işlem hattını yürütür.

ASP.NET Core filtre işlem hattı

Yöntemine Startup.Configure ara yazılım bileşenlerinin eklenme sırası, ara yazılım bileşenlerinin isteklerde çağrılma sırasını ve yanıtın ters sırasını tanımlar. Sipariş, güvenlik, performans ve işlevsellik açısından kritik önem taşır.

Aşağıdaki Startup.Configure yöntem, güvenlikle ilgili ara yazılım bileşenlerini tipik önerilen sırayla ekler:

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

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    // app.UseCookiePolicy();

    app.UseRouting();
    // app.UseRequestLocalization();
    // app.UseCors();

    app.UseAuthentication();
    app.UseAuthorization();
    // app.UseSession();
    // app.UseResponseCompression();
    // app.UseResponseCaching();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Yukarıdaki kodda:

  • Tek tek kullanıcı hesaplarıyla yeni bir web uygulaması oluşturulurken eklenmemiş ara yazılım açıklama satırı yapılır.
  • Her ara yazılım tam olarak bu sırada görünmez, ancak çoğu öyledir. Örnek:
    • UseCors, UseAuthenticationve UseAuthorization gösterilen sırada görünmelidir.
    • UseCorsşu anda bu hata nedeniyle daha önce UseResponseCaching görünmelidir.
    • UseRequestLocalization , istek kültürünü denetleyebilen herhangi bir ara yazılımdan önce görünmelidir (örneğin, app.UseMvcWithDefaultRoute()).

Bazı senaryolarda ara yazılımların farklı sıralamaları vardır. Örneğin önbelleğe alma ve sıkıştırma sıralama senaryoya özgüdür ve birden çok geçerli sıralama vardır. Örnek:

app.UseResponseCaching();
app.UseResponseCompression();

Yukarıdaki kodla, sıkıştırılmış yanıt önbelleğe alınarak CPU kaydedilebilir, ancak Gzip veya Brotli gibi farklı sıkıştırma algoritmalarını kullanarak bir kaynağın birden çok gösterimini önbelleğe alabilirsiniz.

Aşağıdaki sıralama, sıkıştırılmış statik dosyaların önbelleğe alınmasını sağlamak için statik dosyaları birleştirir:

app.UseResponseCaching();
app.UseResponseCompression();
app.UseStaticFiles();

Aşağıdaki Startup.Configure yöntem, yaygın uygulama senaryoları için ara yazılım bileşenleri ekler:

  1. Özel durum/hata işleme
    • Uygulama Geliştirme ortamında çalıştırıldığında:
      • Geliştirici Özel Durum Sayfası Ara Yazılımı (UseDeveloperExceptionPage) uygulama çalışma zamanı hatalarını bildirir.
      • Veritabanı Hata Sayfası Ara Yazılımı veritabanı çalışma zamanı hatalarını bildirir.
    • Uygulama Üretim ortamında çalıştırıldığında:
      • Özel Durum İşleyici Ara Yazılımı (UseExceptionHandler), aşağıdaki ara yazılımlarda oluşan özel durumları yakalar.
      • HTTP Strict Transport Security Protocol (HSTS) Ara Yazılımı (UseHsts) üst bilgisini Strict-Transport-Security ekler.
  2. HTTPS Yeniden Yönlendirme Ara Yazılımı (UseHttpsRedirection), HTTP isteklerini HTTPS'ye yönlendirir.
  3. Statik Dosya Ara Yazılımı (UseStaticFiles), statik dosyaları ve kısa devreleri daha fazla istek işlemesi döndürür.
  4. Cookie İlke Ara Yazılımı (UseCookiePolicy), uygulamayı AB Genel Veri Koruma Yönetmeliği (GDPR) düzenlemelerine uygun kılar.
  5. Ara Yazılımı (UseRouting) istekleri yönlendirmeye yönlendirme.
  6. Kimlik Doğrulama Ara Yazılımı (UseAuthentication), güvenli kaynaklara erişim izni verilmeden önce kullanıcının kimliğini doğrulamayı dener.
  7. Yetkilendirme Ara Yazılımı (UseAuthorization), kullanıcının güvenli kaynaklara erişmesini sağlar.
  8. Oturum Ara Yazılımı (UseSession), oturum durumunu oluşturur ve korur. Uygulama oturum durumunu kullanıyorsa, İlke Ara Yazılımı'nın ardından Cookie ve MVC Ara Yazılımı'nın öncesinde Oturum Ara Yazılımı'nı çağırın.
  9. İstek işlem hattına Pages uç noktaları eklemek Razor için Uç Nokta Yönlendirme Ara Yazılımı (UseEndpoints ileMapRazorPages).
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseSession();

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

Yukarıdaki örnek kodda, her ara yazılım uzantısı yöntemi ad alanı üzerinden Microsoft.AspNetCore.Builder kullanıma IApplicationBuilder sunulur.

UseExceptionHandler işlem hattına eklenen ilk ara yazılım bileşenidir. Bu nedenle, Özel Durum İşleyici Ara Yazılımı sonraki çağrılarda oluşan özel durumları yakalar.

Statik Dosya Ara Yazılımı, istekleri ve kısa devreyi kalan bileşenlerden geçmeden işleyebilmesi için işlem hattının başında çağrılır. Statik Dosya Ara Yazılımı yetkilendirme denetimi sağlamaz . Wwwroot kapsamındakiler de dahil olmak üzere Statik Dosya Ara Yazılımı tarafından sunulan tüm dosyalar genel kullanıma açıktır. Statik dosyaların güvenliğini sağlama yaklaşımı için bkz. ASP.NET Core statik dosyalar.

İstek Statik Dosya Ara Yazılımı tarafından işlenmezse, kimlik doğrulamasını gerçekleştiren Kimlik Doğrulama Ara Yazılımına ()UseAuthentication geçirilir. Kimlik doğrulaması kimliği doğrulanmamış istekleri kısa devre yapmaz. Kimlik Doğrulama Ara Yazılımı isteklerin kimliğini doğrulasa da, yetkilendirme (ve reddetme) yalnızca MVC belirli Razor bir Sayfayı veya MVC denetleyicisini ve eylemini seçtikten sonra gerçekleşir.

Aşağıdaki örnekte, Statik Dosya Ara Yazılımı tarafından Yanıt Sıkıştırma Ara Yazılımı öncesinde statik dosya isteklerinin işlendiği bir ara yazılım sırası gösterilmektedir. Statik dosyalar bu ara yazılım sırası ile sıkıştırılamaz. Razor Sayfalar yanıtları sıkıştırılabilir.

public void Configure(IApplicationBuilder app)
{
    // Static files aren't compressed by Static File Middleware.
    app.UseStaticFiles();

    app.UseRouting();

    app.UseResponseCompression();

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

Tek Sayfalı Uygulamalar (SPA) için, SPA ara yazılımı UseSpaStaticFiles genellikle ara yazılım işlem hattında en son gelir. SPA ara yazılımı en son gelir:

  • Diğer tüm ara yazılımların önce eşleşen isteklere yanıt vermesine izin vermek için.
  • İstemci tarafı yönlendirmeli SPA'ların sunucu uygulaması tarafından tanınmayan tüm yollar için çalışmasına izin vermek için.

SPA'lar hakkında daha fazla bilgi için React ve Angular proje şablonlarının kılavuzlarına bakın.

İletilen Üst Bilgiler Ara Yazılım sırası

İletilen Üst Bilgiler Ara Yazılımı diğer ara yazılımlardan önce çalıştırılmalıdır. Bu sıralama, iletilen üst bilgi bilgilerini kullanan ara yazılımların işlenmek üzere üst bilgi değerlerini tüketmesini sağlar. Tanılama ve hata işleme ara yazılımından sonra İletilen Üst Bilgiler Ara Yazılımını çalıştırmak için bkz. İletilen Üst Bilgiler Ara Yazılımı sırası.

Ara yazılım işlem hattını dallanma

Map uzantılar, işlem hattını dallanma kuralı olarak kullanılır. Map belirtilen istek yolunun eşleşmelerine göre istek işlem hattını dallar. İstek yolu verilen yol ile başlıyorsa dal yürütülür.

public class Startup
{
    private static void HandleMapTest1(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test 1");
        });
    }

    private static void HandleMapTest2(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test 2");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Map("/map1", HandleMapTest1);

        app.Map("/map2", HandleMapTest2);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
        });
    }
}

Aşağıdaki tabloda, önceki kodun kullanılmasıyla http://localhost:1234 ilgili istekler ve yanıtlar gösterilmektedir.

İstek Yanıt
localhost:1234 Eşleme dışı temsilciden merhaba.
localhost:1234/map1 Harita Testi 1
localhost:1234/map2 Harita Testi 2
localhost:1234/map3 Eşleme dışı temsilciden merhaba.

Map Kullanıldığında, eşleşen yol kesimleri her istek için öğesinden HttpRequest.Path kaldırılır ve sonuna HttpRequest.PathBase eklenir.

Map iç içe yerleştirmeyi destekler, örneğin:

app.Map("/level1", level1App => {
    level1App.Map("/level2a", level2AApp => {
        // "/level1/level2a" processing
    });
    level1App.Map("/level2b", level2BApp => {
        // "/level1/level2b" processing
    });
});

Map aynı anda birden çok segmenti de eşleştirebilir:

public class Startup
{
    private static void HandleMultiSeg(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map multiple segments.");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Map("/map1/seg1", HandleMultiSeg);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate.");
        });
    }
}

MapWhen belirtilen koşulun sonucuna göre istek işlem hattını dallar. İstekleri işlem hattının yeni bir dalı ile eşlemek için herhangi bir tür Func<HttpContext, bool> koşulu kullanılabilir. Aşağıdaki örnekte, bir sorgu dizesi değişkeninin branchvarlığını algılamak için bir koşul kullanılır:

public class Startup
{
    private static void HandleBranch(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            var branchVer = context.Request.Query["branch"];
            await context.Response.WriteAsync($"Branch used = {branchVer}");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.MapWhen(context => context.Request.Query.ContainsKey("branch"),
                               HandleBranch);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
        });
    }
}

Aşağıdaki tabloda, önceki kodun kullanılmasıyla http://localhost:1234 ilgili istekler ve yanıtlar gösterilmektedir:

İstek Yanıt
localhost:1234 Eşleme dışı temsilciden merhaba.
localhost:1234/?branch=main Kullanılan dal = main

UseWhen ayrıca verilen koşulun sonucuna göre istek işlem hattını dallar. 'den MapWhenfarklı olarak, bu dal kısa devre yapmıyorsa veya terminal ara yazılımı içermiyorsa ana işlem hattına yeniden katılır:

public class Startup
{
    private void HandleBranchAndRejoin(IApplicationBuilder app, ILogger<Startup> logger)
    {
        app.Use(async (context, next) =>
        {
            var branchVer = context.Request.Query["branch"];
            logger.LogInformation("Branch used = {branchVer}", branchVer);

            // Do work that doesn't write to the Response.
            await next();
            // Do other work that doesn't write to the Response.
        });
    }

    public void Configure(IApplicationBuilder app, ILogger<Startup> logger)
    {
        app.UseWhen(context => context.Request.Query.ContainsKey("branch"),
                               appBuilder => HandleBranchAndRejoin(appBuilder, logger));

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from main pipeline.");
        });
    }
}

Yukarıdaki örnekte, tüm istekler için "Ana işlem hattından merhaba" yanıtı yazılmıştır. İstek bir sorgu dizesi değişkeni branchiçeriyorsa, ana işlem hattı yeniden katılmadan önce değeri günlüğe kaydedilir.

Yerleşik ara yazılım

ASP.NET Core aşağıdaki ara yazılım bileşenleriyle birlikte kullanılır. Order sütunu, istek işleme işlem hattında ara yazılım yerleşimi ve ara yazılımın istek işlemeyi hangi koşullar altında sonlandırabileceği hakkında notlar sağlar. Ara yazılım, istek işleme işlem hattını kısa devreye alıp daha fazla aşağı akış ara yazılımının bir isteği işlemesini önlediğinde, buna terminal ara yazılımı denir. Kısa devre oluşturma hakkında daha fazla bilgi için IApplicationBuilder ile ara yazılım işlem hattı oluşturma bölümüne bakın.

Ara yazılım Description Sipariş
Kimlik Doğrulaması Kimlik doğrulama desteği sağlar. Önce HttpContext.User gereklidir. OAuth geri çağırmaları için terminal.
Yetkilendirme Yetkilendirme desteği sağlar. Kimlik Doğrulama Ara Yazılımı'nın hemen ardından.
Cookie Ilkesi Kişisel bilgileri depolamak için kullanıcıların onaylarını izler ve ve SameSitegibi secure alanlar için cookie en düşük standartları uygular. Bu sorunlara cookieneden olan ara yazılımdan önce. Örnekler: Kimlik Doğrulaması, Oturum, MVC (TempData).
CORS Çıkış Noktaları Arası Kaynak Paylaşımını yapılandırır. CORS kullanan bileşenlerden önce. UseCorsşu anda bu hata nedeniyle daha önce UseResponseCaching gitmelidir.
Tanılama Geliştirici özel durum sayfası, özel durum işleme, durum kodu sayfaları ve yeni uygulamalar için varsayılan web sayfası sağlayan birkaç ayrı ara yazılım. Hata oluşturan bileşenlerden önce. Özel durumlar için terminal veya yeni uygulamalar için varsayılan web sayfasını sunma.
İletilen Üst Bilgiler Proksied üst bilgilerini geçerli isteğe iletir. Güncelleştirilmiş alanları kullanan bileşenlerden önce. Örnekler: scheme, host, client IP, method.
Sistem Durumu Denetimi Bir ASP.NET Core uygulamasının durumunu ve veritabanı kullanılabilirliğini denetleme gibi bağımlılıklarını denetler. Bir istek sistem durumu denetimi uç noktasıyla eşleşiyorsa terminal.
Üst Bilgi Yayma HTTP üst bilgilerini gelen istekten giden HTTP İstemcisi isteklerine yayın.
HTTP Yöntemini Geçersiz Kılma Gelen POST isteğinin yöntemini geçersiz kılmasına izin verir. Güncelleştirilmiş yöntemi kullanan bileşenlerden önce.
HTTPS Yeniden Yönlendirme Tüm HTTP isteklerini HTTPS'ye yeniden yönlendirin. URL'yi kullanan bileşenlerden önce.
HTTP Katı Aktarım Güvenliği (HSTS) Özel bir yanıt üst bilgisi ekleyen güvenlik geliştirme ara yazılımı. Yanıtlar gönderilmeden önce ve istekleri değiştiren bileşenlerden sonra. Örnekler: İletilen Üst Bilgiler, URL Yeniden Yazma.
MVC MVC/Razor Sayfaları ile istekleri işler. bir istek bir yolla eşleşiyorsa terminal.
OWIN OWIN tabanlı uygulamalar, sunucular ve ara yazılım ile birlikte çalışma. OWIN Ara Yazılımı isteği tam olarak işliyorsa terminal.
Yanıt Önbelleğe Alma Yanıtları önbelleğe alma desteği sağlar. Önbelleğe alma gerektiren bileşenlerden önce. UseCORS önce UseResponseCachinggelmelidir.
Yanıt Sıkıştırma Yanıtları sıkıştırma desteği sağlar. Sıkıştırma gerektiren bileşenlerden önce.
İstek Yerelleştirmesi Yerelleştirme desteği sağlar. Yerelleştirmeye duyarlı bileşenlerden önce. kullanırken RouteDataRequestCultureProviderYönlendirme Ara Yazılımı'nın ardından görünmesi gerekir.
Uç Nokta Yönlendirme İstek yollarını tanımlar ve kısıtlar. Eşleşen yollar için terminal.
SPA Tek Sayfalı Uygulama (SPA) için varsayılan sayfayı döndürerek ara yazılım zincirinde bu noktadan gelen tüm istekleri işler Zincirde geç, böylece statik dosyaları, MVC eylemlerini vb. sunan diğer ara yazılımların öncelikli olması.
Oturum Kullanıcı oturumlarını yönetmek için destek sağlar. Oturum gerektiren bileşenlerden önce.
Statik Dosyalar Statik dosyalar sunmak ve dizine göz atmak için destek sağlar. bir istek bir dosyayla eşleşiyorsa terminal.
URL Yeniden Yazma URL'leri yeniden yazma ve istekleri yeniden yönlendirme desteği sağlar. URL'yi kullanan bileşenlerden önce.
WebSockets WebSocket protokolunu etkinleştirir. WebSocket isteklerini kabul etmek için gereken bileşenlerden önce.

Ek kaynaklar