ASP.NET Core Middleware
Rick Anderson ve Steve Smith
Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama işlem hattında bir araya gelen yazılımdır. Her bileşen:
- İsteğin işlem hattında bir sonraki bileşene aktarıp geçmeyeceklerini seçer.
- İşlem hattında bir sonraki bileşenden önce ve sonra iş gerçekleştirebilirsiniz.
İstek temsilcileri, istek işlem hattını oluşturmak için kullanılır. İstek temsilcileri her HTTP isteğini işler.
İstek temsilcileri , ve uzantı Run Map yöntemleri kullanılarak Use yapılandırılır. Tek bir istek temsilcisi, anonim bir yöntem (satır içinde ara yazılım olarak çağ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çinde anonim yöntemler, ara yazılım bileşenleri olarak da adlandırılan ara yazılımdır. İstek işlem hattında her ara yazılım bileşeni, işlem hattında bir sonraki bileşenin iptali veya işlem hattının kısa devresini oluşturma sorumluluğundadır. Ara yazılım kısa devreleri, daha fazla ara yazılımın isteği işlemesini önleyene kadar terminal ara yazılımı olarak adlandırılan bir ara yazılımdır.
ASP.NET Core ara yazılıma HTTP işleyicileri ve modülleri geçirmeASP.NET Core ve ASP.NET 4.x'te istek işlem hatları arasındaki farkı açıklar ve ek ara yazılım örnekleri sağlar.
ile ara yazılım işlem hattı oluşturma WebApplication
İstek ASP.NET Core işlem hattı, sırayla çağrılan bir dizi istek temsilcisini temsil eder. Aşağıdaki diyagramda kavramlar gösterildi. Yürütme iş parçacığı siyah okları izler.

Her temsilci, bir sonraki temsilciden önce ve sonra işlem gerçekleştirecek. İşlem hattının sonraki aşamalarında oluşan özel durumları yakalamak için özel durum işleme temsilcileri işlem hattının erken bir aşamasında çağrılabilir.
Mümkün olan en ASP.NET Core uygulama, tüm istekleri işlemek için 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.
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 Use zincirleme. parametresi, next işlem hattında bir sonraki temsilciyi temsil eder. parametresini çağırmayarak işlem hattını kısa devreye next aktarın. Aşağıdaki örnekte de olduğu gibi genellikle temsilciden önce ve next sonra eylemleri gerçekleştirin:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
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.");
});
app.Run();
Bir temsilci bir isteği sonraki temsilciye geçene kadar istek işlem hattını kısa devrede yapmak olarak adlandırılan bir işlem hattıdır. Gereksiz işlerden kaçınan kısa devreler genellikle tercih edilir. Örneğin, Statik Dosya Ara Yazılımı, statik dosya için bir isteği işerek ve işlem hattının geri kalanını kısa devreye aktararak terminal ara yazılımı olarak davranabilirsiniz. İşlem hattına eklenen ara yazılım, daha fazla işlemeyi sonlandıran ara yazılım deyimlerinden sonra da next.Invoke kodu işlemeye devam ediyor. Ancak, önceden gönderilmiş bir yanıta yazmaya çalışırken aşağıdaki uyarıya bakın.
Uyarı
Yanıt next.Invoke istemciye gönderildikten sonra çağrısına gerek yok. Yanıt HttpResponse başlatıldıktan sonra olarak yapılan değişiklikler bir özel durum oluşturur. Örneğin, üst bilgileri ve durum kodunu ayarlama bir özel durum oluşturur. çağrısının ardından yanıt gövdesine next yazma:
- Bir protokol ihlaline neden olabilir. Örneğin, belirtilenden daha fazla
Content-Lengthyazma. - Gövde biçimini bozabilirsiniz. Örneğin, BIR CSS dosyasına HTML alt bilgi yazma.
HasStarted , üst bilgilerin gönderildiğini veya gövdenin yazıldığına ilişkin yararlı bir ipucudur.
Run temsilciler bir parametre next almaz. İlk temsilci Run her zaman terminaldir ve işlem hattını sonlandırılır. Run bir kuraldır. Bazı ara yazılım bileşenleri, Run[Middleware] işlem hattının sonunda çalıştıran yöntemleri ortaya çıkarır:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
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.");
});
app.Run();
Ingilizce dışındaki dillere çevrilmiş kod açıklamalarını görmek isterseniz, Bu GitHub tartışma sorununubize tanıyın.
Yukarıdaki örnekte temsilci Run yanıta yazar "Hello from 2nd delegate." ve işlem hattını sonlandırılır. Temsilciden Use Run sonra başka bir veya Run temsilci eklenirse çağrılmaz.
Uygulamayı tercih edin. Bağlamı bir sonrakine geçirmeyi gerektiren aşırı yükleme kullanma
Belirtilmeyen uygulama. Uzantı yöntemini kullanın:
- Bağlamın 'a geçirmeyi
nextgerektirir. - Diğer aşırı yükleme kullanırken gereken istek başına iki iç ayırmayı kaydeder.
Daha fazla bilgi için bu soruna GitHub bakın.
Ara yazılım sırası
Aşağıdaki diyagramda, MVC ve Pages uygulamaları için ASP.NET Core işlem hattının Razor eksiksiz bir şekilde işlemesi yer amektedir. Tipik bir uygulamada, mevcut ara yazılımların nasıl sıra olduğunu ve özel ara yazılımların eklenmiştir. Mevcut ara yazılımları yeniden sıralama veya senaryolarınız için gerektiğinde yeni özel ara yazılımları ekleme üzerinde tam denetime sahipsiniz.
Önceki diyagramdaki Uç Nokta ara yazılımı, ilgili uygulama türü MVC veya Sayfalar için filtre — işlem hattını Razor yürütür.
Önceki diyagramdaki Yönlendirme ara yazılımı Statik Dosyalar'ın ardından gösterilmektedir. Bu, proje şablonlarının uygulamayı açıkça çağırarak uygulayan sıradır. UseRouting. çağrısında değil, app.UseRouting 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.
Ara yazılım bileşenlerinin Program.cs dosyasına eklenme sırası, ara yazılım bileşenlerinin istekler üzerinde çağrılma sıralarını ve yanıt için ters sırayı tanımlar. Sıra güvenlik, performans ve işlevsellik açısından kritik öneme sahip.
Program.cs'de vurgulanan aşağıdaki kod, güvenlikle ilgili ara yazılım bileşenlerini önerilen tipik 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 eklenmeen ara yazılıma açıklama eklenmiştir.
- Her ara yazılım tam olarak bu sırada değil, birçok ara yazılımda görünür. Örnek:
UseCors,UseAuthentication, ve gösterilen sırada görünUseAuthorizationgerekir.UseCorsşu anda önce görüntüUseResponseCachinggerekir. Bu gereksinim dotnet/aspnetcore GitHub 23218 numaralı sorunda açıklanmıştır.UseRequestLocalization, istek kültürünü kontrol etmek için herhangi bir ara yazılımdan (örneğin, ) önce görüntüapp.UseMvcWithDefaultRoute()gerekir.
Bazı senaryolarda ara yazılımların sıralaması farklıdır. Örneğin, önbelleğe alma ve sıkıştırma sıralaması senaryoya özgü ve birden çok geçerli sıralama vardır. Örnek:
app.UseResponseCaching();
app.UseResponseCompression();
Önceki kodda, sıkıştırılmış yanıtı önbelleğe alma ile 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 alma işlemini tamamlarsanız.
Aşağıdaki sıralama, sıkıştırılmış statik dosyaların önbelleğe alınmasını sağlayan statik dosyaları birleştirir:
app.UseResponseCaching();
app.UseResponseCompression();
app.UseStaticFiles();
Aşağıdaki Program.cs kodu, yaygın uygulama senaryoları için ara yazılım bileşenlerini ekler:
- Özel durum/hata işleme
- Uygulama Geliştirme ortamında çalıştır olduğunda:
- Geliştirici Özel Durum Sayfası Ara Yazılımı ( UseDeveloperExceptionPage ) uygulama çalışma zamanı hatalarını raporlar.
- Veritabanı Hatası Sayfası Ara Yazılımı ( UseDatabaseErrorPage ) veritabanı çalışma zamanı hatalarını raporlar.
- Uygulama Üretim ortamında çalıştır olduğunda:
- Özel Durum İşleyicisi Ara Yazılımı ( UseExceptionHandler ) aşağıdaki ara yazılımlarda ortaya atılan özel durumları yakalar.
- HTTP Katı Aktarım Güvenliği Protokolü (HSTS) Ara Yazılımı ( UseHsts ) üst bilgi
Strict-Transport-Securityekler.
- Uygulama Geliştirme ortamında çalıştır olduğunda:
- HTTPS Yeniden Yönlendirme Ara Yazılımı ( UseHttpsRedirection ) HTTP isteklerini HTTPS'ye yeniden yönlendirer.
- Statik Dosya Ara Yazılımı ( UseStaticFiles ), statik dosyaları ve kısa devreleri daha fazla istek işlemeye döndürür.
- Cookie İlke Ara Yazılımı ( UseCookiePolicy ), uygulamayı AB Genel Veri Koruma Yönetmeliği (GDPR) düzenlemelerine uygun şekilde sağlar.
- İstekleri yönlendirmeye Yönlendirme Ara Yazılımı ( UseRouting ).
- Kimlik Doğrulama Ara Yazılımı ( UseAuthentication ), güvenli kaynaklara erişim izni verilmeden önce kullanıcının kimliğini doğrulamaya çalışır.
- Yetkilendirme Ara Yazılımı ( UseAuthorization ), bir kullanıcıya güvenli kaynaklara erişme yetkisi sağlar.
- Oturum Ara Yazılımı ( UseSession ) oturum durumunu belirtir ve sürdürür. Uygulama oturum durumunu kullanıyorsa, İlke Ara Yazılımı'nın ardından ve MVC Ara Yazılımı'dan Cookie önce Oturum Ara Yazılımı'nın çağrısını başlatın.
- İstek işlem hattına Sayfalar uç noktaları eklemek için Uç Nokta Yönlendirme Ara Yazılımı ( UseEndpoints MapRazorPages Razor ile).
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ı WebApplicationBuilder üzerinden Microsoft.AspNetCore.Builder açıktır.
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 tüm özel durumları yakalar.
Statik Dosya Ara Yazılımı, kalan bileşenlerden geçerek istekleri ve kısa devreyi işleyene kadar işlem hattının başlarında çağrılır. Statik Dosya Ara Yazılımı yetkilendirme denetimi sağlamaz. Wwwroot altı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'daki statik dosyalar .
İstek Statik Dosya Ara Yazılımı tarafından iş değilse, kimlik doğrulaması gerçekleştiren Kimlik Doğrulama Ara Yazılımına ( UseAuthentication ) geçirebilirsiniz. Kimlik doğrulaması, kimliği doğrulanmamış isteklerin kısa devresini açmaz. Kimlik Doğrulama Ara Yazılımı isteklerin kimliğini doğrulasa da yetkilendirme (ve reddetme) yalnızca MVC belirli bir Sayfa veya Razor MVC denetleyicisini ve eylemi seçmesi sonrasında gerçekleşir.
Aşağıdaki örnek, statik dosyalar için isteklerin Yanıt Sıkıştırma Ara Yazılımı'dan önce Statik Dosya Ara Yazılımı tarafından işlene bir ara yazılım sırası gösterir. Statik dosyalar bu ara yazılım sırasıyla sıkıştırılır. RazorSayfalar 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 daha fazla bilgi için proje şablonlarının React Angular kılavuzlarına bakın.
Iletili Üst Bilgiler Ara Yazılımı sırası
İletilen üstbilgiler ara yazılımı, diğer ara yazılım öncesinde çalıştırılmalıdır. Bu sıralama, iletilen üst bilgi bilgilerine bağlı olan ara yazılımın işleme için üst bilgi değerlerini kullanmasını sağlar. Tanılama ve hata işleme ara yazılımı sonrasında Iletilen üstbilgiler ara yazılımını çalıştırmak için bkz. Iletilen üstbilgiler ara yazılım sırası.
Ara yazılım işlem hattını dallara daldırın
Map uzantılar, işlem hattını dallara alama kuralı olarak kullanılır. Map verilen 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ımından gelen http://localhost:1234 istekler ve yanıtlar yer almaktadır.
| İstek | Yanıt |
|---|---|
| localhost:1234 | Eşleme olmayan temsilciden Hello. |
| localhost:1234/map1 | Eşleme Testi 1 |
| localhost:1234/map2 | Eşleme Testi 2 |
| localhost:1234/map3 | Eşleme olmayan temsilciden Hello. |
MapKullanılırken, her istek için ile eşilen yol kesimleri kaldırılır ve sonuna HttpRequest.Path 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 segmentle eşleyebilirsiniz:
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 verilen talebin sonucuna göre istek işlem hattını dallar. İstekleri işlem hattının Func<HttpContext, bool> yeni bir dalı ile eşlemek için türün herhangi bir önk karşıtlıkları kullanılabilir. Aşağıdaki örnekte, bir sorgu dizesi değişkeninin varlığını algılamak için bir durum branch kullanılmıştı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ımından gelen http://localhost:1234 istekler ve yanıtlar yer almaktadır:
| İstek | Yanıt |
|---|---|
| localhost:1234 | Eşleme olmayan temsilciden Hello. |
| localhost:1234/?branch=main | Kullanılan dal = main |
UseWhen ayrıca, istek işlem hattını verilen talebin sonuçlarına göre dallar. 'den farklı olarak, bu dal kısa devre veya terminal ara yazılımı içermezse ana işlem MapWhen hattına yeniden bir araya getirildi:
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.
});
}
Önceki örnekte "Hello from main pipeline" (Ana işlem hattından Hello) yanıtı. tüm istekler için yazılır. İstek bir sorgu dizesi değişkeni branch içerirse, 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ımların istek işlemeyi hangi koşullar altında sonlandırabilirsiniz? ile ilgili notlar sağlar. Bir ara yazılım, istek işleme işlem hattını kısa devre dışı bırakarak daha fazla aşağı akış ara yazılımına istek işlemesini önleyene kadar terminal ara yazılımı olarak adlandırılan bir yazılımdır. 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ğrulaması desteği sağlar. | Daha HttpContext.User önce 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 | Kullanıcıların kişisel bilgileri depolamak için onaylarını izler ve ve gibi alanlar için en cookie düşük standartları secure zorunlu SameSite tutar. |
Bu soruna neden olan ara cookie yazılımdan önce. Örnekler: Kimlik Doğrulaması, Oturum, MVC (TempData). |
| CORS | Çıkış Noktası Arası Kaynak Paylaşımını yapılandırıyor. | CORS kullanan bileşenlerden önce. UseCorsşu anda bu UseResponseCaching hatadan önce gitli. |
| DeveloperExceptionPage | Yalnızca Geliştirme ortamında kullanılmak üzere tasarlanmış hata bilgilerine sahip bir sayfa üretir. | Hata oluşturan bileşenlerden önce. Proje şablonları, ortam Geliştirme olduğunda bu ara yazılımı işlem hattında ilk ara yazılım olarak otomatik olarak kaydedmektedir. |
| 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ı sunan. |
| Iletili Üst Bilgiler | Proxied üst bilgileri geçerli istek üzerine iletir. | Güncelleştirilmiş alanları tüketen bileşenlerden önce. Örnekler: şema, konak, istemci IP'si, yöntemi. |
| Durum Denetimi | Veritabanı kullanılabilirliğini denetleme ASP.NET Core uygulamanın ve bağımlılıklarının sistem durumunu denetler. | Bir istek bir durum denetimi uç noktasıyla eş olursa terminal. |
| Üst Bilgi Yayma | Http üst bilgilerini gelen istekten giden HTTP İstemcisi isteklerine yayır. | |
| 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öntemi Geçersiz Kılma | Gelen bir POST isteğinin yöntemini geçersiz k araklastirmasina izin verir. | Güncelleştirilmiş yöntemi tüketen bileşenlerden önce. |
| HTTPS Yeniden Yönlendirme | Tüm HTTP isteklerini HTTPS'ye yeniden yönlendirin. | URL'yi tüketen bileşenlerden önce. |
| HTTP Katı Aktarım Güvenliği (HSTS) | Özel yanıt üst bilgisi ekleyen güvenlik geliştirme ara yazılımı. | Yanıtlar gönderilmeden önce ve istekleri değiştiren bileşenler. Örnekler: Iletilen üstbilgiler, URL yeniden yazma. |
| MVC | MVC/sayfalarla istekleri işler Razor . | Bir istek bir rota ile eşleşiyorsa Terminal. |
| OWIN | OWIN tabanlı uygulamalar, sunucular ve ara yazılım ile birlikte çalışma. | OWıN ara yazılımı isteği tam olarak işliyorsa Terminal. |
| yanıt Önbelleğe Alma | Yanıtları önbelleğe almak için destek sağlar. | Önbelleğe alma gerektiren bileşenlerden önce. UseCORS önünde gelmelidir UseResponseCaching . |
| Yanıt sıkıştırması | Yanıtları sıkıştırmak için destek sağlar. | Sıkıştırma gerektiren bileşenlerden önce. |
| Yerelleştirme iste | Yerelleştirme desteği sağlar. | Yerelleştirmenin önemli bileşenlerinden önce. Kullanırken ara yazılımlar yönlendirildikten sonra gelmelidir RouteDataRequestCultureProvider . |
| Uç nokta yönlendirme | İstek yollarını tanımlar ve kısıtlar. | Eşleşen yolların terminali. |
| Star | Tek sayfalı uygulama (SPA) için varsayılan sayfayı döndürerek, ara yazılım zincirindeki bu noktadan gelen tüm istekleri işler | Zincirde geç, böylece statik dosyalar, MVC eylemleri vb. hizmet sağlayan diğer ara yazılımlar önceliklidir. |
| Oturum | Kullanıcı oturumlarını yönetmek için destek sağlar. | Oturum gerektiren bileşenlerden önce. |
| Statik dosyalar | Statik dosyaları ve dizin taramayı sunma desteği 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çimindesunucu erişim günlükleri oluşturur. | Ara yazılım işlem hattının başlangıcında. |
| WebSockets | WebSockets protokolünü etkinleştirilir. | WebSocket isteklerini kabul etmek için gereken bileşenlerden önce. |
Ek kaynaklar
- Ömür ve kayıt seçenekleri , kapsamlı, geçici ve tek bir yaşam süresi Hizmetleri olan bir ara yazılım örneği içerir.
- özel ASP.NET Core ara yazılımı yaz
- Test ASP.NET Core ara yazılımı
- ASP.NET Core ara yazılıma HTTP işleyicileri ve modülleri geçirme
- ASP.NET Core 'de uygulama başlatma
- ASP.NET Core içindeki istek özellikleri
- ASP.NET Core 'de fabrika tabanlı ara yazılım etkinleştirmesi
- ASP.NET Core'de üçüncü taraf kapsayıcı ile ara yazılım etkinleştirme
By Rick Anderson ve Steve Smith
Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama ardışık düzenine çevrilmiş yazılımdır. Her bileşen:
- İsteğin işlem hattında sonraki bileşene geçirilip geçemeyeceğini seçer.
- İşlem hattındaki sonraki bileşenden önce ve sonra iş gerçekleştirebilir.
İstek işlem hattını oluşturmak için istek temsilcileri kullanılır. İstek temsilcileri her HTTP isteğini işler.
İstek temsilcileri Run ,, Map ve Use genişletme yöntemleri kullanılarak yapılandırılır. Tek bir istek temsilcisi, bir anonim Yöntem (çevrimiç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ımlar. İstek ardışık düzeninde bulunan her bir ara yazılım bileşeni, işlem hattındaki bir sonraki bileşeni çağırmaktan veya işlem hattının kısa süreli olarak sağlanmasından sorumludur. Bir ara yazılım kısa devre dışı bırakıldığında, bu, diğer ara yazılımların isteği işlemesini önlediği için Terminal ara yazılımı olarak adlandırılır.
ASP.NET Core ara yazılıma HTTP işleyicileri ve modülleri geçirmeASP.NET Core ve ASP.NET 4. x arasındaki istek işlem hatları arasındaki farkı açıklar ve ek ara yazılım örnekleri sağlar.
IApplicationBuilder ile bir ara yazılım işlem hattı oluşturma
ASP.NET Core isteği ardışık düzeni, bir dizi istekten oluşur ve bunlardan sonra çağırılır. Aşağıdaki diyagramda kavram gösterilmektedir. Yürütmenin iş parçacığı siyah okları izler.

Her temsilci bir sonraki temsilciden önce ve sonra işlemleri gerçekleştirebilir. Özel durum işleme temsilcileri işlem hattında erken çağrılmalıdır, bu sayede işlem hattının sonraki aşamalarında oluşan özel durumları yakalayabilirler.
mümkün olan en basit ASP.NET Core uygulaması, tüm istekleri işleyen tek bir istek temsilcisi kurar. 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 temsilciyi ile birlikte zincirle Use . Parametresi, ardışık düzendeki bir next sonraki temsilciyi temsil eder. Ardışık düzen, sonraki parametreyi çağırarak işlem hattı için kısa devre dışı bırakabilirsiniz. Aşağıdaki örnekte gösterildiği gibi genellikle 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 iletmezse, istek ardışık düzenini, kısa devre olarak gerçekleştirmektir. Gereksiz çalışmayı önlediği için kısa devre, genellikle tercih edilir. Örneğin, statik dosya ara yazılımı , bir statik dosya için bir isteği işleyerek ve işlem hattının geri kalanını gerçekleştirerek bir Terminal ara yazılımı görevi görebilir. Daha fazla işlemeyi sonlandıran ara yazılımlar, deyimlerinden sonra kodu işlerken işlem hattına eklenen ara yazılımlar next.Invoke . Ancak, zaten gönderilmiş bir yanıta yazma girişimi hakkında aşağıdaki uyarıya bakın.
Uyarı
next.Invokeİstemciye yanıt gönderildikten sonra çağrı yapmayın. Yanıt başladıktan HttpResponse sonra yapılan değişiklikler özel durum oluşturur. Örneğin, üst bilgiler ve durum kodu ayarlamak bir özel durum oluşturur. Çağrıldıktan sonra yanıt gövdesine yazma next :
- Protokol ihlaline neden olabilir. Örneğin, belirtiden daha fazla yazma
Content-Length. - Gövde biçimi bozulabilir. Örneğin, bir CSS dosyasına bir HTML altbilgisi yazma.
HasStarted , üstbilgilerin gönderilip gönderilmediğini veya gövdenin yazıldığını belirten faydalı bir ipucu.
Run Temsilciler bir parametre almaz next . İlk Run temsilci her zaman terminaldir ve ardışık düzeni sonlandırır. Run bir kuraldır. Bazı ara yazılım bileşenleri, işlem Run[Middleware] hattının sonunda çalışan yöntemleri ortaya çıkarır:
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.");
});
}
}
Ingilizce dışındaki dillere çevrilmiş kod açıklamalarını görmek isterseniz, Bu GitHub tartışma sorununubize tanıyın.
Önceki örnekte, Run temsilci "Hello from 2nd delegate." yanıta yazar ve ardından işlem hattını sonlandırır. Use Run Temsilciden sonra başka bir veya temsilci eklendiyse Run , çağrılmaz.
Ara yazılım sırası
aşağıdaki diyagramda ASP.NET Core MVC ve Pages uygulamaları için tüm istek işleme işlem hattı gösterilmektedir Razor . Tipik bir uygulamada, var olan middlewares nasıl sıralı olduğunu ve özel middlewares eklendiğini görebilirsiniz. Mevcut middlewares yeniden düzenleme veya senaryolarınız için gerektiğinde yeni özel middlewares ekleme hakkında tam denetiminiz vardır.
Önceki Diyagramdaki uç nokta ara yazılımı, karşılık gelen uygulama türü — MVC veya sayfaları için filtre işlem hattını yürütür Razor .
Ara yazılım bileşenlerinin yöntemine eklenme sırası, Startup.Configure Ara yazılım bileşenlerinin istekler üzerinde çağrıldığı sırayı ve yanıtın ters sırasını tanımlar. Sıra, güvenlik, performans ve işlevsellik açısından önemlidir .
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:
- Bireysel kullanıcılar hesaplarıyla yeni bir Web uygulaması oluştururken eklenmemiş olan ara yazılım, yorum yapılır.
- Her ara yazılım bu tam sırada görünmez, ancak birçok do. Örnek:
UseCors,UseAuthenticationveUseAuthorizationgösterilen sırada görünmelidir.UseCorsŞu andaUseResponseCachingBu hatanedeniyle önce görünmelidir.UseRequestLocalizationistek kültürünü denetlemeyebilir (örneğin,), herhangi bir ara yazılım önce gelmelidirapp.UseMvcWithDefaultRoute().
Bazı senaryolarda, ara yazılımın farklı bir sıralaması vardır. Örneğin, önbelleğe alma ve sıkıştırma sıralaması, senaryoya özgüdür ve birden çok geçerli sipariş vardır. Örnek:
app.UseResponseCaching();
app.UseResponseCompression();
Yukarıdaki kodla, CPU sıkıştırılmış yanıtı önbelleğe alarak kaydedilebilir, ancak gzip veya Brotli gibi farklı sıkıştırma algoritmaları kullanarak bir kaynağın birden çok temsilini önbelleğe alma işlemini sonlandırabilir.
Aşağıdaki sıralama, sıkıştırılmış statik dosyaların önbelleğe alınmasına izin vermek için statik dosyaları birleştirir:
app.UseResponseCaching();
app.UseResponseCompression();
app.UseStaticFiles();
Aşağıdaki Startup.Configure Yöntem, genel uygulama senaryoları için ara yazılım bileşenleri ekler:
- Özel durum/hata işleme
- Uygulama geliştirme ortamında çalıştığında:
- Geliştirici özel durum sayfası ara yazılımı ( UseDeveloperExceptionPage ) uygulama çalışma zamanı hatalarını raporlar.
- Veritabanı hata sayfası ara yazılımı veritabanı çalışma zamanı hatalarını raporlar.
- Uygulama, üretim ortamında çalıştığında:
- Özel durum Işleyici ara yazılımı ( UseExceptionHandler ) aşağıdaki middlewares oluşturulan özel durumları yakalar.
- HTTP katı aktarım güvenliği Protokolü (HSTS) ara yazılımı ( UseHsts )
Strict-Transport-Securityüstbilgiyi ekler.
- Uygulama geliştirme ortamında çalıştığında:
- HTTPS yeniden yönlendirme ara yazılımı ( UseHttpsRedirection ) http ISTEKLERINI https 'ye yönlendirir.
- Statik dosya ara yazılımı ( UseStaticFiles ) statik dosyaları ve kısa devre dışı istek işlemeyi döndürür.
- Cookie İlke ara yazılımı ( UseCookiePolicy ), uygulamayı ab genel veri koruma yönetmeliği (GDPR) düzenlemelerine uyar.
- UseRoutingİstekleri yönlendirmek Için ara yazılım () yönlendirme.
- Kimlik doğrulama ara yazılımı ( UseAuthentication ), güvenli kaynaklara erişim izni vermeden önce kullanıcının kimliğini doğrulamaya çalışır.
- Yetkilendirme ara yazılımı ( UseAuthorization ), bir kullanıcıya güvenli kaynaklara erişim yetkisi verir.
- Oturum ara yazılımı ( UseSession ) oturum durumunu oluşturur ve korur. Uygulama oturum durumu kullanıyorsa, Cookie Ilke ara yazılımı ve MVC ara yazılımı sonrasında oturum ara yazılımını çağırın.
- UseEndpoints MapRazorPages Razor İstek ardışık düzenine sayfa uç noktaları eklemek Için uç nokta yönlendirme ara yazılımı (ile).
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 bir ara yazılım uzantısı yöntemi IApplicationBuilder Microsoft.AspNetCore.Builder ad alanı aracılığıyla sunulur.
UseExceptionHandler , ardışık düzene eklenen ilk ara yazılım bileşenidir. Bu nedenle, özel durum Işleyicisi ara yazılımı sonraki çağrılarında oluşan tüm özel durumları yakalar.
Statik dosya ara yazılımı, geri kalan bileşenlere geçmeden istekleri ve kısa devre dışı bırakabilirsiniz. bu sayede işlem hattının başlarında çağrılır. Statik dosya ara yazılımı yetkilendirme denetimleri sağlamaz. Wwwroot altındakiler de dahil olmak üzere statik dosya ara yazılımı tarafından sunulan tüm dosyalar herkese açık bir şekilde sunulur. Statik dosyaların güvenliğini sağlamaya yönelik bir yaklaşım için bkz ASP.NET Core'daki statik dosyalar ..
İstek statik dosya ara yazılımı tarafından işlenmemişse, kimlik doğrulaması yapan kimlik doğrulama ara yazılımı () üzerinden geçirilir UseAuthentication . Kimlik doğrulaması kısa devre dışı kimliği doğrulanmamış istekler değildir. Kimlik doğrulama ara yazılımı isteklerin kimliğini doğrulayabilse de, yetkilendirme (ve reddetme) yalnızca MVC, belirli bir Razor sayfa veya MVC denetleyicisi ve eylem seçerse oluşur.
Aşağıdaki örnek, yanıt sıkıştırma ara yazılımı ile önce statik dosya isteklerinin statik dosya ara yazılımı tarafından işlendiği bir ara yazılım sırasını gösterir. Statik dosyalar bu ara yazılım sırasıyla sıkıştırılmaz. RazorSayfa yanıtları sıkıştırılabilirler.
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ı uygulamalarda (maça), SPA ara yazılımı UseSpaStaticFiles genellikle ara yazılım ardışık düzeninde en son gelir. SPA ara yazılımı son olarak gelir:
- Tüm diğer middlewares önce eşleşen isteklere yanıt vermek için.
- İstemci tarafı yönlendirmenin sunucu uygulaması tarafından tanınmayan tüm yollar için çalışmasına izin vermek için.
maça hakkında daha fazla bilgi için, React ve Angular projesi şablonlarına yönelik kılavuzlara bakın.
İletilen üstbilgiler ara yazılım sırası
İletilen üstbilgiler ara yazılımı, diğer ara yazılım öncesinde çalıştırılmalıdır. Bu sıralama, iletilen üst bilgi bilgilerine bağlı olan ara yazılımın işleme için üst bilgi değerlerini kullanmasını sağlar. Tanılama ve hata işleme ara yazılımı sonrasında Iletilen üstbilgiler ara yazılımını çalıştırmak için bkz. Iletilen üstbilgiler ara yazılım sırası.
Ara yazılım ardışık düzenini dallandırma
Map Uzantılar, işlem hattının dallanması için bir kural olarak kullanılır. Map istek işlem hattını, belirtilen istek yolunun eşleşmelerini temel alarak dallandırır. İ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 kodu kullanmanın istekleri ve yanıtları gösterilmektedir http://localhost:1234 .
| İstek | Yanıt |
|---|---|
| localhost: 1234 | Eşleme olmayan temsilciden Merhaba. |
| localhost: 1234/Map1 | Eşleme testi 1 |
| localhost: 1234/MAP2 | Eşleme testi 2 |
| localhost: 1234/map3 | Eşleme olmayan temsilciden Merhaba. |
MapKullanıldığında, eşleşen yol kesimleri HttpRequest.Path her istek için kaynağından kaldırılır ve öğesine eklenir HttpRequest.PathBase .
Map iç içe geçirmeyi 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 kesimde eşleşir:
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 verilen koşulun sonucuna göre istek ardışık düzenini dallandırır. Herhangi bir tür koşulu Func<HttpContext, bool> , istekleri işlem hattının yeni bir dalına eşlemek için kullanılabilir. Aşağıdaki örnekte, bir sorgu dizesi değişkeninin varlığını algılamak için bir koşul kullanılır branch :
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 kodu kullanmanın istekleri ve yanıtları gösterilmektedir http://localhost:1234 :
| İstek | Yanıt |
|---|---|
| localhost: 1234 | Eşleme olmayan temsilciden Merhaba. |
| localhost: 1234/? dalı = ana | Kullanılan dal = ana |
UseWhen Ayrıca, belirtilen koşulun sonucuna göre istek ardışık düzenini dallandırır. İle farklı olarak MapWhen , bu dal, kısa devre olmaması veya bir Terminal ara yazılımı içermesi durumunda 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, "ana ardışık düzen üzerinden Merhaba" yanıtı. Tüm istekler için yazılmıştır. İstek bir sorgu dizesi değişkeni içeriyorsa branch , ana işlem hattının yeniden katılması için 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 gönderilir. Order sütunu, istek işleme ardışık düzeninde ara yazılım yerleştirme ve ara yazılımın istek işlemeyi sonlandırabilecekleri koşullar bölümünde notlar sağlar. Bir ara yazılım, istek işlem hattının ne kadar kısa süreli olduğunu ve daha fazla aşağı akış ara yazılımı bir isteği işlemesini engelliyorsa, bu, Terminal ara yazılımı olarak adlandırılır. Kısa devre oluşturma hakkında daha fazla bilgi için, IApplicationBuilder ile bir 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. | HttpContext.UserGerekir. OAuth geri çağırmaları için Terminal. |
| Yetkilendirme | Yetkilendirme desteği sağlar. | Kimlik doğrulama ara yazılımı hemen sonrasında. |
| Cookie İlkesinin | Kişisel bilgileri depolamak için kullanıcılardan onay izler ve ve gibi alanlar için en düşük standartları uygular cookie secure SameSite . |
İle ilgili olan ara yazılımlar cookie . Örnekler: Kimlik Doğrulaması, Oturum, MVC (TempData). |
| CORS | Çıkış Noktası Arası Kaynak Paylaşımı'nın yapılandırılması. | CORS kullanan bileşenlerden önce. UseCorsşu anda bu UseResponseCaching hatadan önce gitli. |
| 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ı sunan. |
| Iletili Üst Bilgiler | Proxied üst bilgileri geçerli istek üzerine iletir. | Güncelleştirilmiş alanları tüketen bileşenlerden önce. Örnekler: şema, konak, istemci IP'i, yöntemi. |
| Durum Denetimi | Veritabanı kullanılabilirliğini denetleme ASP.NET Core uygulamanın ve bağımlılıklarının sistem durumunu denetler. | Bir istek bir durum denetimi uç noktasıyla eş olursa terminal. |
| Üst Bilgi Yayma | Http üst bilgilerini gelen istekten giden HTTP İstemcisi isteklerine yayır. | |
| HTTP Yöntemi Geçersiz Kılma | Gelen bir POST isteğinin yöntemini geçersiz k araklastirmasina izin verir. | Güncelleştirilmiş yöntemi tüketen bileşenlerden önce. |
| HTTPS Yeniden Yönlendirme | Tüm HTTP isteklerini HTTPS'ye yeniden yönlendirin. | URL'yi tüketen bileşenlerden önce. |
| HTTP Katı Aktarım Güvenliği (HSTS) | Özel 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: Iletili Üst Bilgiler, URL Yeniden Yazma. |
| MVC | MVC/ Pages ile istekleri Razor işleme. | bir istek bir yol ile eş olursa 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şlese terminal. |
| Yanıt Önbelleğe Alma | Yanıtları önbelleğe alma desteği sağlar. | Önbelleğe almayı gerektiren bileşenlerden önce. UseCORS önce UseResponseCaching gelsin. |
| Yanıt Sıkıştırma | Yanıtları sıkıştırma desteği sağlar. | Sıkıştırma gerektiren bileşenlerden önce. |
| yerelleştirme isteği | Yerelleştirme desteği sağlar. | Yerelleştirmeye duyarlı bileşenlerden önce. kullanılırken Yönlendirme Ara Yazılımı'nın ardından görün RouteDataRequestCultureProvider 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şleme | Zincirin sonlarında statik dosyaları, MVC eylemlerini vb. sunan diğer ara yazılımların önceliği vardır. |
| Oturum | Kullanıcı oturumlarını yönetme desteği sağlar. | Oturum gerektiren bileşenlerden önce. |
| Statik Dosyalar | Statik dosyaları ve dizin taramayı sunan destek sağlar. | bir istek bir dosyayla eşlese terminal. |
| URL Yeniden Yazma | URL'leri yeniden yazma ve istekleri yeniden yönlendirme desteği sağlar. | URL'yi tüketen bileşenlerden önce. |
| WebSockets | WebSocket protokolünü sağlar. | WebSocket isteklerini kabul etmek için gereken bileşenlerden önce. |
Ek kaynaklar
- Yaşam süresi ve kayıt seçenekleri kapsamlı, geçici ve tek kullanım ömrü hizmetleri içeren eksiksiz bir ara yazılım örneği içerir.
- özel ASP.NET Core ara yazılımı yaz
- Test ASP.NET Core ara yazılımı
- ASP.NET Core ara yazılıma HTTP işleyicileri ve modülleri geçirme
- ASP.NET Core 'de uygulama başlatma
- ASP.NET Core içindeki istek özellikleri
- ASP.NET Core 'de fabrika tabanlı ara yazılım etkinleştirmesi
- ASP.NET Core'de üçüncü taraf kapsayıcı ile ara yazılım etkinleştirme