özel ASP.NET Core ara yazılımı yaz
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. ASP.NET Core, zengin bir yerleşik ara yazılım bileşenleri kümesi sağlar, ancak bazı senaryolarda özel bir ara yazılım yazmak isteyebilirsiniz.
Not
Bu konuda, kural tabanlı ara yazılım yazma açıklanmaktadır. Güçlü yazma ve istek başına etkinleştirme kullanan bir yaklaşım için bkz ASP.NET Core 'de fabrika tabanlı ara yazılım etkinleştirmesi ..
Ara yazılım sınıfı
Ara yazılım genellikle bir sınıfta kapsüllenir ve bir genişletme yöntemiyle birlikte sunulur. Bir sorgu dizesinden geçerli istek için kültürü ayarlayan aşağıdaki ara yazılımı göz önünde bulundurun:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.Run(async (context) =>
{
await context.Response.WriteAsync(
$"Hello {CultureInfo.CurrentCulture.DisplayName}");
});
}
}
Yukarıdaki örnek kod, bir ara yazılım bileşeni oluşturmayı göstermek için kullanılır. ASP.NET Core yerleşik yerelleştirme desteği için bkz ASP.NET Core'de genelleştirme ve yerelleştirme ..
Kültürü geçirerek, ara yazılımı test edin. Örneğin, istek https://localhost:5001/?culture=no .
Aşağıdaki kod, ara yazılım temsilcisini bir sınıfa taşıtabilirler:
using Microsoft.AspNetCore.Http;
using System.Globalization;
using System.Threading.Tasks;
namespace Culture
{
public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;
public RequestCultureMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}
// Call the next delegate/middleware in the pipeline
await _next(context);
}
}
}
Ara yazılım sınıfı şunları içermelidir:
- Türünde bir parametreye sahip ortak Oluşturucu RequestDelegate .
- Veya adlı bir genel
InvokeYöntemInvokeAsync. Bu yöntem şunları içermelidir:- Bir döndürür
Task. - Türünde bir ilk parametreyi kabul edin HttpContext .
- Bir döndürür
Oluşturucuya yönelik ek parametreler ve Invoke / InvokeAsync bağımlılık ekleme (dı)tarafından doldurulur.
Ara yazılım bağımlılıkları
Ara yazılım, bağımlılıklarındaki bağımlılıklarını açığa çıkararak Açık bağımlılıklar ilkesini izlemelidir. Ara yazılım, uygulama ömrü başına bir kez oluşturulur. Bir istek içindeki ara yazılım ile hizmetleri paylaşmanız gerekiyorsa, Istek başına ara yazılım bağımlılıkları bölümüne bakın.
Ara yazılım bileşenleri, bağımlılık ekleme (dı) öğesinden Oluşturucu parametreleri aracılığıyla bağımlılıklarını çözümleyebilir. Useara yazılım < T > ayrıca ek parametreleri doğrudan kabul edebilir.
İstek başına ara yazılım bağımlılıkları
Ara yazılım uygulama başlangıcında oluşturulduğundan, isteğe göre değil, ara yazılım oluşturucuları tarafından kullanılan kapsamlı ömür Hizmetleri, her istek sırasında bağımlılığı eklenen diğer türlerle paylaşılmaz. Bir kapsamlı hizmeti, ara yazılım ve diğer türler arasında paylaşmanız gerekiyorsa, bu Hizmetleri Invoke metodun imzasına ekleyin. InvokeYöntemi, dı tarafından doldurulan ek parametreleri kabul edebilir:
public class CustomMiddleware
{
private readonly RequestDelegate _next;
public CustomMiddleware(RequestDelegate next)
{
_next = next;
}
// IMyScopedService is injected into Invoke
public async Task Invoke(HttpContext httpContext, IMyScopedService svc)
{
svc.MyProperty = 1000;
await _next(httpContext);
}
}
Ömür ve kayıt seçenekleri , kapsamlı ömür Hizmetleri olan bir ara yazılım örneğinin tamamını içerir.
Ara yazılım genişletme yöntemi
Aşağıdaki genişletme yöntemi, ara yazılımı aracılığıyla kullanıma sunar IApplicationBuilder :
using Microsoft.AspNetCore.Builder;
namespace Culture
{
public static class RequestCultureMiddlewareExtensions
{
public static IApplicationBuilder UseRequestCulture(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<RequestCultureMiddleware>();
}
}
}
Aşağıdaki kod, içindeki ara yazılımı çağırır Startup.Configure :
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseRequestCulture();
app.Run(async (context) =>
{
await context.Response.WriteAsync(
$"Hello {CultureInfo.CurrentCulture.DisplayName}");
});
}
}
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.
- ASP.NET Core Middleware
- 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