ASP.NET Core 7.0'daki yenilikler
Bu makalede, ilgili belgelerin bağlantıları ile ASP.NET Core 7.0'daki en önemli değişiklikler vurgulanır.
ASP.NET Core'da hız sınırlama ara yazılımı
Ara Microsoft.AspNetCore.RateLimiting
yazılım, hız sınırlama ara yazılımı sağlar. Uygulamalar hız sınırlama ilkelerini yapılandırıp ilkeleri uç noktalara ekler. Daha fazla bilgi için bkz . ASP.NET Core'da hız sınırlama ara yazılımı.
Kimlik doğrulaması, DefaultScheme olarak tek bir düzen kullanır
Kimlik doğrulamasını basitleştirme çalışmasının bir parçası olarak, yalnızca tek bir kimlik doğrulama şeması kaydedildiğinde, otomatik olarak DefaultScheme olarak kullanılır ve belirtilmesi gerekmez. Daha fazla bilgi için bkz . DefaultScheme.
MVC ve Razor sayfalar
MVC görünümlerinde ve Razor Sayfalarında boş değer atanabilir modeller için destek
Null değer atanabilir sayfa veya görünüm modelleri, ASP.NET Core uygulamalarıyla null durum denetimi kullanılırken deneyimi geliştirmek için desteklenir:
@model Product?
MVC ve API Denetleyicilerinde ile bağlama IParsable<T>.TryParse
API, IParsable<TSelf>.TryParse
bağlama denetleyicisi eylem parametresi değerlerini destekler. Daha fazla bilgi için bkz . ile IParsable<T>.TryParse
bağlama.
cookie Onay değerini özelleştirme
7'den önceki ASP.NET Core sürümlerinde onay doğrulaması, cookie onayı belirtmek için değerini cookie kullanıryes
. Artık onayı temsil eden değeri belirtebilirsiniz. Örneğin, yerine true
kullanabilirsinizyes
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.ConsentCookieValue = "true";
});
var app = builder.Build();
Daha fazla bilgi için bkzcookie özelleştirme.
API denetleyicileri
API denetleyicilerinde DI ile parametre bağlama
API denetleyicisi eylemleri için parametre bağlama, tür hizmet olarak yapılandırıldığında bağımlılık ekleme yoluyla parametreleri bağlar. Bu, özniteliği bir parametreye açıkça uygulamak [FromServices]
için artık gerekli olmadığı anlamına gelir. Aşağıdaki kodda, her iki eylem de saati döndürür:
[Route("[controller]")]
[ApiController]
public class MyController : ControllerBase
{
public ActionResult GetWithAttribute([FromServices] IDateTime dateTime)
=> Ok(dateTime.Now);
[Route("noAttribute")]
public ActionResult Get(IDateTime dateTime) => Ok(dateTime.Now);
}
Nadir durumlarda, otomatik DI, BIR API denetleyicileri eylem yönteminde de kabul edilen DI türüne sahip uygulamaları bozabilir. DI'de ve API denetleyicisi eyleminde bağımsız değişken olarak bir türe sahip olmak yaygın değildir. Parametrelerin otomatik bağlamasını devre dışı bırakmak için DisableImplicitFromServicesParameters'ı ayarlayın
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSingleton<IDateTime, SystemDateTime>();
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.DisableImplicitFromServicesParameters = true;
});
var app = builder.Build();
app.MapControllers();
app.Run();
ASP.NET Core 7.0'da, BIR API denetleyicisi eylemindeki bir bağımsız değişkenin DI'den mi yoksa diğer kaynaklardan mı geldiğini belirlemek için ile uygulama başlangıcında IServiceProviderIsService DI'deki türler denetlenir.
API Denetleyicisi eylem parametrelerinin bağlama kaynağını çıkarsamak için yeni mekanizma aşağıdaki kuralları kullanır:
- Önceden belirtilen
BindingInfo.BindingSource
bir değerin üzerine hiçbir zaman yazılmaz. - DI kapsayıcısında kayıtlı karmaşık tür parametresi atanır
BindingSource.Services
. - DI kapsayıcısında kayıtlı olmayan karmaşık tür parametresine atanır
BindingSource.Body
. - Herhangi bir yol şablonunda
- Diğer tüm parametreler şunlardır:
BindingSource.Query
.
Doğrulama hatalarındaki JSON özellik adları
Varsayılan olarak, bir doğrulama hatası oluştuğunda model doğrulaması, hata anahtarı olarak özellik adıyla bir ModelStateDictionary oluşturur. Tek sayfalı uygulamalar gibi bazı uygulamalar, Web API'lerinden oluşturulan doğrulama hataları için JSON özellik adlarının kullanılmasından yararlanmaktadır. Aşağıdaki kod, JSON özellik adlarını kullanmak için öğesini kullanacak SystemTextJsonValidationMetadataProvider
şekilde doğrulamayı yapılandırmaktadır:
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
options.ModelMetadataDetailsProviders.Add(new SystemTextJsonValidationMetadataProvider());
});
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Aşağıdaki kod, Json.NET kullanırken NewtonsoftJsonValidationMetadataProvider
JSON özellik adını kullanmak için doğrulamayı yapılandırmaktadır:
using Microsoft.AspNetCore.Mvc.NewtonsoftJson;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
options.ModelMetadataDetailsProviders.Add(new NewtonsoftJsonValidationMetadataProvider());
}).AddNewtonsoftJson();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Daha fazla bilgi için bkz . Doğrulama hatalarında JSON özellik adlarını kullanma
Minimal API'ler
Minimal API uygulamalarında filtreler
En düşük API filtreleri, geliştiricilerin şunları destekleyen iş mantığını uygulamasına olanak sağlar:
- Yol işleyiciden önce ve sonra kod çalıştırma.
- Yol işleyicisi çağırma sırasında sağlanan parametreleri inceleme ve değiştirme.
- Yol işleyicisinin yanıt davranışını kesme.
Filtreler aşağıdaki senaryolarda yararlı olabilir:
- Bir uç noktaya gönderilen istek parametrelerini ve gövdesini doğrulama.
- İstek ve yanıt hakkındaki günlük bilgileri.
- İsteğin desteklenen bir API sürümünü hedeflediğini doğrulama.
Daha fazla bilgi için bkz . Minimum API uygulamalarında filtreler
Üst bilgilerden ve sorgu dizelerinden dizileri ve dize değerlerini bağlama
ASP.NET 7'de sorgu dizelerini ilkel türler, dize dizileri ve StringValues dizilerine bağlama desteklenir:
// Bind query string values to a primitive type array.
// GET /tags?q=1&q=2&q=3
app.MapGet("/tags", (int[] q) =>
$"tag1: {q[0]} , tag2: {q[1]}, tag3: {q[2]}");
// Bind to a string array.
// GET /tags2?names=john&names=jack&names=jane
app.MapGet("/tags2", (string[] names) =>
$"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}");
// Bind to StringValues.
// GET /tags3?names=john&names=jack&names=jane
app.MapGet("/tags3", (StringValues names) =>
$"tag1: {names[0]} , tag2: {names[1]}, tag3: {names[2]}");
Sorgu dizelerini veya üst bilgi değerlerini karmaşık türlerden oluşan bir diziye bağlama, tür TryParse
uygulandığında desteklenir. Daha fazla bilgi için bkz . Üst bilgilerden ve sorgu dizelerinden dizileri ve dize değerlerini bağlama.
Daha fazla bilgi için bkz . Uç nokta özeti veya açıklaması ekleme.
İstek gövdesini veya Stream
olarak bağlama PipeReader
İstek gövdesi, kullanıcının verileri işlemesi gereken senaryoları verimli bir Stream
şekilde desteklemek için veya PipeReader
olarak bağlanabilir ve:
- Verileri blob depolamaya depolayın veya bir kuyruk sağlayıcısına sıralayın.
- Depolanan verileri bir çalışan işlemi veya bulut işleviyle işleme.
Örneğin, veriler Azure Kuyruk depolama alanına sıralanabilir veya Azure Blob depolamadadepolanabilir.
Daha fazla bilgi için bkz . İstek gövdesini veya Stream
olarak bağlama PipeReader
Yeni Results.Stream aşırı yüklemeleri
Arabelleğe almadan temel alınan HTTP yanıt akışına erişmesi gereken senaryoları barındırmak için yeni Results.Stream
aşırı yüklemeler kullanıma sunulmuştur. Bu aşırı yüklemeler, API'nin http yanıt akışına veri akışı yaptığı durumları da (örneğin, Azure Blob Depolama) iyileştirir. Aşağıdaki örnek, belirtilen görüntünün daha küçük bir boyutunu döndürmek için ImageSharp'ı kullanır:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Processing;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/process-image/{strImage}", (string strImage, HttpContext http, CancellationToken token) =>
{
http.Response.Headers.CacheControl = $"public,max-age={TimeSpan.FromHours(24).TotalSeconds}";
return Results.Stream(stream => ResizeImageAsync(strImage, stream, token), "image/jpeg");
});
async Task ResizeImageAsync(string strImage, Stream stream, CancellationToken token)
{
var strPath = $"wwwroot/img/{strImage}";
using var image = await Image.LoadAsync(strPath, token);
int width = image.Width / 2;
int height = image.Height / 2;
image.Mutate(x =>x.Resize(width, height));
await image.SaveAsync(stream, JpegFormat.Instance, cancellationToken: token);
}
Daha fazla bilgi için bkz . Stream örnekleri
Minimum API'ler için yazılan sonuçlar
.NET 6'da, IResult döndürülen nesneyi HTTP yanıtına seri hale getirmek için JSON örtük desteğini kullanmayan en düşük API'lerden döndürülen değerleri temsil eden arabirim tanıtıldı. Statik Results sınıfı, farklı yanıt türlerini temsil eden farklı IResult
nesneler oluşturmak için kullanılır. Örneğin, yanıt durum kodunu ayarlama veya başka bir URL'ye yönlendirme. Bununla IResult
birlikte, bu yöntemlerden döndürülen uygulama çerçevesi türleri iç türlerdi, bu da birim testindeki yöntemlerden döndürülen belirli IResult
türü doğrulamayı zorlaştırıyordu.
.NET 7'de uygulayan IResult
türler geneldir ve test sırasında tür onaylarına olanak sağlar. Örneğin:
[TestClass()]
public class WeatherApiTests
{
[TestMethod()]
public void MapWeatherApiTest()
{
var result = WeatherApi.GetAllWeathers();
Assert.IsInstanceOfType(result, typeof(Ok<WeatherForecast[]>));
}
}
En düşük yol işleyicileri için geliştirilmiş birim test edilebilirliği
IResult uygulama türleri artık ad alanında Microsoft.AspNetCore.Http.HttpResults genel kullanıma sunulmuştur. Uygulama IResult
türleri, lambda yerine adlandırılmış yöntemler kullanılırken minimum yol işleyicilerini birim testi için kullanılabilir.
Aşağıdaki kod sınıfını Ok<TValue>
kullanır:
[Fact]
public async Task GetTodoReturnsTodoFromDatabase()
{
// Arrange
await using var context = new MockDb().CreateDbContext();
context.Todos.Add(new Todo
{
Id = 1,
Title = "Test title",
Description = "Test description",
IsDone = false
});
await context.SaveChangesAsync();
// Act
var result = await TodoEndpointsV1.GetTodo(1, context);
//Assert
Assert.IsType<Results<Ok<Todo>, NotFound>>(result);
var okResult = (Ok<Todo>)result.Result;
Assert.NotNull(okResult.Value);
Assert.Equal(1, okResult.Value.Id);
}
Daha fazla bilgi için bkz IResult
. uygulama türleri.
Yeni HttpResult arabirimleri
Ad alanında Microsoft.AspNetCore.Http aşağıdaki arabirimler, filtre uygulamalarında yaygın olarak kullanılan bir desen olan çalışma zamanında türü algılamak IResult
için bir yol sağlar:
- IContentTypeHttpResult
- IFileHttpResult
- INestedHttpResult
- IStatusCodeHttpResult
- IValueHttpResult
- IValueHttpResult<TValue>
Daha fazla bilgi için bkz . IHttpResult arabirimleri.
Minimum API'ler için OpenAPI geliştirmeleri
Microsoft.AspNetCore.OpenApi
NuGet paketi
Paket, Microsoft.AspNetCore.OpenApi
uç noktalar için OpenAPI belirtimleriyle etkileşimlere izin verir. Paket, pakette tanımlanan OpenAPI modelleri ile En Düşük API'lerde Microsoft.AspNetCore.OpenApi
tanımlanan uç noktalar arasında bir bağlantı işlevi görür. Paket, uç noktayı açıklamak için kullanılan bir OpenAPI ek açıklama türü oluşturmak için uç noktanın parametrelerini, yanıtlarını ve meta verilerini inceleyen bir API sağlar.
app.MapPost("/todoitems/{id}", async (int id, Todo todo, TodoDb db) =>
{
todo.Id = id;
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
})
.WithOpenApi();
Parametrelerle çağrı WithOpenApi
yöntemi, WithOpenApi
OpenAPI ek açıklamasını değiştirmek için kullanılabilecek bir işlevi kabul eder. Örneğin, aşağıdaki kodda uç noktanın ilk parametresine bir açıklama eklenir:
app.MapPost("/todo2/{id}", async (int id, Todo todo, TodoDb db) =>
{
todo.Id = id;
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
})
.WithOpenApi(generatedOperation =>
{
var parameter = generatedOperation.Parameters[0];
parameter.Description = "The ID associated with the created Todo";
return generatedOperation;
});
Uç nokta açıklamalarını ve özetlerini sağlama
Minimum API'ler artık OpenAPI belirtimi oluşturma için açıklama ve özetlerle işlem açıklamalarını destekliyor. Uzantı yöntemlerini WithDescription çağırabilir ve WithSummary [EndpointDescription] ve [EndpointSummary] özniteliklerini kullanabilirsiniz.
Daha fazla bilgi için bkz. Minimum API uygulamalarında OpenAPI
IFormFile ve IFormFileCollection kullanılarak dosya yüklemeleri
Minimum API'ler artık ve IFormFile
ile IFormFileCollection
dosya yüklemeyi destekliyor. Aşağıdaki kod dosyayı karşıya yüklemek için ve IFormFile kullanırIFormFileCollection:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.MapPost("/upload", async (IFormFile file) =>
{
var tempFile = Path.GetTempFileName();
app.Logger.LogInformation(tempFile);
using var stream = File.OpenWrite(tempFile);
await file.CopyToAsync(stream);
});
app.MapPost("/upload_many", async (IFormFileCollection myFiles) =>
{
foreach (var file in myFiles)
{
var tempFile = Path.GetTempFileName();
app.Logger.LogInformation(tempFile);
using var stream = File.OpenWrite(tempFile);
await file.CopyToAsync(stream);
}
});
app.Run();
Kimliği doğrulanmış dosya yükleme istekleri Yetkilendirme üst bilgisi, istemci sertifikası veya üst bilgicookiedesteklenir.
Antiforgery için yerleşik destek yoktur. Ancak, hizmetiIAntiforgery
uygulanabilir.
[AsParameters]
attribute, bağımsız değişken listeleri için parametre bağlamayı etkinleştirir
özniteliği[AsParameters]
bağımsız değişken listeleri için parametre bağlamayı etkinleştirir. Daha fazla bilgi için bkz . ile [AsParameters]
bağımsız değişken listeleri için parametre bağlama.
Minimum API'ler ve API denetleyicileri
Yeni sorun ayrıntıları hizmeti
Sorun ayrıntıları hizmeti, HTTP API'leri IProblemDetailsServiceiçin Sorun Ayrıntıları oluşturmayı destekleyen arabirimini uygular.
Daha fazla bilgi için bkz . Sorun ayrıntıları hizmeti.
Yol grupları
Uzantı yöntemi, MapGroup ortak bir ön eke sahip uç nokta gruplarını düzenlemeye yardımcı olur. Yinelenen kodu azaltır ve uç nokta meta verileriniRequireAuthorizationve WithMetadata gibi yöntemlere tek bir çağrıyla tüm uç nokta gruplarını özelleştirmeye olanak tanır.
Örneğin, aşağıdaki kod iki benzer uç nokta grubu oluşturur:
app.MapGroup("/public/todos")
.MapTodosApi()
.WithTags("Public");
app.MapGroup("/private/todos")
.MapTodosApi()
.WithTags("Private")
.AddEndpointFilterFactory(QueryPrivateTodos)
.RequireAuthorization();
EndpointFilterDelegate QueryPrivateTodos(EndpointFilterFactoryContext factoryContext, EndpointFilterDelegate next)
{
var dbContextIndex = -1;
foreach (var argument in factoryContext.MethodInfo.GetParameters())
{
if (argument.ParameterType == typeof(TodoDb))
{
dbContextIndex = argument.Position;
break;
}
}
// Skip filter if the method doesn't have a TodoDb parameter.
if (dbContextIndex < 0)
{
return next;
}
return async invocationContext =>
{
var dbContext = invocationContext.GetArgument<TodoDb>(dbContextIndex);
dbContext.IsPrivate = true;
try
{
return await next(invocationContext);
}
finally
{
// This should only be relevant if you're pooling or otherwise reusing the DbContext instance.
dbContext.IsPrivate = false;
}
};
}
public static RouteGroupBuilder MapTodosApi(this RouteGroupBuilder group)
{
group.MapGet("/", GetAllTodos);
group.MapGet("/{id}", GetTodo);
group.MapPost("/", CreateTodo);
group.MapPut("/{id}", UpdateTodo);
group.MapDelete("/{id}", DeleteTodo);
return group;
}
Bu senaryoda, sonuçta üst bilgi Location
için 201 Created
göreli bir adres kullanabilirsiniz:
public static async Task<Created<Todo>> CreateTodo(Todo todo, TodoDb database)
{
await database.AddAsync(todo);
await database.SaveChangesAsync();
return TypedResults.Created($"{todo.Id}", todo);
}
İlk uç nokta grubu yalnızca ön ekli /public/todos
isteklerle eşleşir ve kimlik doğrulaması olmadan erişilebilir. İkinci uç nokta grubu yalnızca ön ekli isteklerle /private/todos
eşleşir ve kimlik doğrulaması gerektirir.
QueryPrivateTodos
Uç nokta filtresi fabrikası, özel todo verilerine erişmeye ve bunları depolamaya izin vermek için yol işleyicisinin TodoDb
parametrelerini değiştiren yerel bir işlevdir.
Yol grupları, yol parametreleri ve kısıtlamalarıyla iç içe grupları ve karmaşık ön ek desenlerini de destekler. Aşağıdaki örnekte, gruba eşlenen user
ve yol işleyicisi dış grup ön eklerinde tanımlanan ve {org}
yol parametrelerini yakalayabilir{group}
.
Ön ek de boş olabilir. Bu, yol desenini değiştirmeden bir uç nokta grubuna uç nokta meta verileri veya filtreleri eklemek için yararlı olabilir.
var all = app.MapGroup("").WithOpenApi();
var org = all.MapGroup("{org}");
var user = org.MapGroup("{user}");
user.MapGet("", (string org, string user) => $"{org}/{user}");
Bir gruba filtre veya meta veri eklemek, bir iç gruba veya belirli bir uç noktaya eklenmiş olabilecek ek filtreler veya meta veriler eklemeden önce bunları her uç noktaya tek tek eklemekle aynı şekilde davranır.
var outer = app.MapGroup("/outer");
var inner = outer.MapGroup("/inner");
inner.AddEndpointFilter((context, next) =>
{
app.Logger.LogInformation("/inner group filter");
return next(context);
});
outer.AddEndpointFilter((context, next) =>
{
app.Logger.LogInformation("/outer group filter");
return next(context);
});
inner.MapGet("/", () => "Hi!").AddEndpointFilter((context, next) =>
{
app.Logger.LogInformation("MapGet filter");
return next(context);
});
Yukarıdaki örnekte dış filtre, ikinci kez eklenmiş olsa bile gelen isteği iç filtreden önce günlüğe kaydeder. Filtreler farklı gruplara uygulandığından, birbirlerine göre eklendikleri sıra önemli değildir. Sipariş filtrelerinin eklenmesi, aynı gruba veya belirli bir uç noktaya uygulandığında önemlidir.
için bir istek /outer/inner/
aşağıdakileri günlüğe kaydeder:
/outer group filter
/inner group filter
MapGet filter
gRPC
JSON kodlama dönüştürme
gRPC JSON kodlama, gRPC hizmetleri için RESTful JSON API'leri oluşturan ASP.NET Core uzantısıdır. gRPC JSON kodlama şunları sağlar:
- Tanıdık HTTP kavramlarıyla gRPC hizmetlerini çağırmaya yönelik uygulamalar.
- İşlevleri çoğaltmadan hem gRPC hem de RESTful JSON API'lerini desteklemek için Core gRPC uygulamalarını ASP.NET.
- Swashbuckle ile tümleştirerek, kodlanmış RESTful API'lerinden OpenAPI oluşturmak için deneysel destek.
Daha fazla bilgi için bkz . ASP.NET Core gRPC uygulamalarında gRPC JSON transcoding ve OpenAPI'yi gRPC JSON transcoding ASP.NET Core uygulamalarıyla kullanma.
ASP.NET Core'da gRPC sistem durumu denetimleri
gRPC sistem durumu denetimi protokolü, gRPC sunucu uygulamalarının sistem durumunu raporlamaya yönelik bir standarttır. Bir uygulama, sistem durumu denetimlerini gRPC hizmeti olarak kullanıma sunar. Bunlar genellikle bir uygulamanın durumunu denetlemek için bir dış izleme hizmetiyle birlikte kullanılır.
gRPC ASP.NET Core, paketle Grpc.AspNetCore.HealthChecks
gRPC sistem durumu denetimleri için yerleşik destek ekledi. .NET sistem durumu denetimlerinin sonuçları arayanlara bildirilir.
Daha fazla bilgi için bkz . ASP.NET Core'da gRPC sistem durumu denetimleri.
Geliştirilmiş arama kimlik bilgileri desteği
Çağrı kimlik bilgileri, gRPC istemcisini sunucuya kimlik doğrulama belirteci gönderecek şekilde yapılandırmanın önerilen yoludur. gRPC istemcileri, çağrı kimlik bilgilerinin kullanımını kolaylaştırmak için iki yeni özelliği destekler:
- Düz metin bağlantılarıyla arama kimlik bilgileri desteği. Daha önce bir gRPC çağrısı yalnızca bağlantıNıN TLS ile güvenli hale getirilmesi durumunda arama kimlik bilgilerini gönderiyordu. üzerinde
GrpcChannelOptions
adlıUnsafeUseInsecureChannelCallCredentials
yeni bir ayar, bu davranışın özelleştirilmesine izin verir. TLS ile bağlantının güvenliğini sağlamamaya yönelik güvenlik etkileri vardır. - adlı
AddCallCredentials
yeni bir yöntem gRPC istemci fabrikası ile kullanılabilir.AddCallCredentials
bir gRPC istemcisi için çağrı kimlik bilgilerini yapılandırmanın hızlı bir yoludur ve bağımlılık ekleme (DI) ile iyi tümleşir.
Aşağıdaki kod gRPC istemci fabrikasını meta verileri gönderecek Authorization
şekilde yapılandırıyor:
builder.Services
.AddGrpcClient<Greeter.GreeterClient>(o =>
{
o.Address = new Uri("https://localhost:5001");
})
.AddCallCredentials((context, metadata) =>
{
if (!string.IsNullOrEmpty(_token))
{
metadata.Add("Authorization", $"Bearer {_token}");
}
return Task.CompletedTask;
});
Daha fazla bilgi için bkz . gRPC istemci fabrikasıyla taşıyıcı belirteci yapılandırma.
SignalR
İstemci sonuçları
Sunucu artık bir istemciden sonuç istemeyi destekliyor. Bunun için sunucunun kullanması ISingleClientProxy.InvokeAsync
ve istemcinin işleyicisinden bir sonuç döndürmesi .On
gerekir. Kesin türe sahip hub'lar da arabirim yöntemlerinden değer döndürebilir.
Daha fazla bilgi için bkz. İstemci sonuçları
Hub yöntemleri için SignalR bağımlılık ekleme
SignalR hub yöntemleri artık bağımlılık ekleme (DI) aracılığıyla hizmet eklemeyi destekliyor.
Hub oluşturucuları, DI'den gelen hizmetleri parametre olarak kabul edebilir ve bu hizmetler bir hub yönteminde kullanılmak üzere sınıfındaki özelliklerde depolanabilir. Daha fazla bilgi için bkz . Hub'a hizmet ekleme
Blazor
Konum değiştirme olaylarını ve gezinti durumunu işleme
.NET 7'de konum Blazor değiştirme olaylarını ve gezinti durumunu korumayı destekler. Bu, kullanıcıları kaydedilmemiş çalışma hakkında uyarmanıza veya kullanıcı sayfa gezintisi gerçekleştirdiğinde ilgili eylemleri gerçekleştirmenize olanak tanır.
Daha fazla bilgi için Yönlendirme ve gezinti makalesinin aşağıdaki bölümlerine bakın:
Boş Blazor proje şablonları
Blazor boş bir sayfaya başlamak için iki yeni proje şablonuna sahiptir. Yeni Blazor Server Boş Uygulama ve Blazor WebAssembly Uygulama Boş proje şablonları, aynı boş olmayan karşılıklarına benzer ancak örnek kod içermeyen şablonlardır. Bu boş şablonlar yalnızca temel bir giriş sayfası içerir ve farklı bir CSS çerçevesiyle başlayabilmeniz için Bootstrap'ı kaldırdık.
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
Blazor özel öğeleri
paket, Microsoft.AspNetCore.Components.CustomElements
kullanarak standart tabanlı özel DOM öğeleriBlazorsağlar.
Daha fazla bilgi için bkz . ASP.NET Çekirdek Razor bileşenleri.
Bağlama değiştiricileri (@bind:after
, @bind:get
, @bind:set
)
Önemli
Özellikler @bind:after
/@bind:get
/@bind:set
şu anda daha fazla güncelleştirme alıyor. En son güncelleştirmelerden yararlanmak için en son SDK'yı yüklediğinizi onaylayın.
Olay geri çağırma parametresi ([Parameter] public EventCallback<string> ValueChanged { get; set; }
) kullanılması desteklenmez. Bunun yerine , öğesine bir -returning veya -returning yöntemi ActionTask@bind:set
geçirin/.@bind:after
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
.NET 7'de, yeni @bind:after
değiştiriciyi kullanarak bir bağlama olayı tamamlandıktan sonra zaman uyumsuz mantık çalıştırabilirsiniz. Aşağıdaki örnekte, arama metninde PerformSearch
yapılan değişiklikler algılandıktan sonra zaman uyumsuz yöntem otomatik olarak çalıştırılır:
<input @bind="searchText" @bind:after="PerformSearch" />
@code {
private string searchText;
private async Task PerformSearch()
{
...
}
}
.NET 7'de, bileşen parametreleri için bağlamayı ayarlamak da daha kolaydır. Bileşenler, bir parametre çifti tanımlayarak iki yönlü veri bağlamayı destekleyebilir:
-
@bind:get
: Bağlanacak değeri belirtir. -
@bind:set
: Değer değiştiğinde için bir geri çağırma belirtir.
@bind:get
ve @bind:set
değiştiricileri her zaman birlikte kullanılır.
Örnekler:
@* Elements *@
<input type="text" @bind="text" @bind:after="() => { }" />
<input type="text" @bind:get="text" @bind:set="(value) => { }" />
<input type="text" @bind="text" @bind:after="AfterAsync" />
<input type="text" @bind:get="text" @bind:set="SetAsync" />
<input type="text" @bind="text" @bind:after="() => { }" />
<input type="text" @bind:get="text" @bind:set="(value) => { }" />
<input type="text" @bind="text" @bind:after="AfterAsync" />
<input type="text" @bind:get="text" @bind:set="SetAsync" />
@* Components *@
<InputText @bind-Value="text" @bind-Value:after="() => { }" />
<InputText @bind-Value:get="text" @bind-Value:set="(value) => { }" />
<InputText @bind-Value="text" @bind-Value:after="AfterAsync" />
<InputText @bind-Value:get="text" @bind-Value:set="SetAsync" />
<InputText @bind-Value="text" @bind-Value:after="() => { }" />
<InputText @bind-Value:get="text" @bind-Value:set="(value) => { }" />
<InputText @bind-Value="text" @bind-Value:after="AfterAsync" />
<InputText @bind-Value:get="text" @bind-Value:set="SetAsync" />
@code {
private string text = "";
private void After(){}
private void Set() {}
private Task AfterAsync() { return Task.CompletedTask; }
private Task SetAsync(string value) { return Task.CompletedTask; }
}
Bileşen hakkında InputText
daha fazla bilgi için bkz . ASP.NET Core Blazor giriş bileşenleri.
Çalışırken Yeniden Yükleme geliştirmeleri
.NET 7'de Çalışırken Yeniden Yükleme desteği aşağıdakileri içerir:
- Bileşenler, bir değer kaldırıldığında parametrelerini varsayılan değerlerine sıfırlar.
-
Blazor WebAssembly:
- Yeni türler ekleyin.
- İç içe sınıflar ekleyin.
- Mevcut türlere statik ve örnek yöntemleri ekleyin.
- Mevcut türlere statik alanlar ve yöntemler ekleyin.
- Mevcut yöntemlere statik lambdalar ekleyin.
- Önceden yakalanan mevcut yöntemlere yakalayan
this
this
lambdalar ekleyin.
içinde MSAL ile dinamik kimlik doğrulama istekleri Blazor WebAssembly
.NET 7'deki yeni sürümler, Blazor WebAssembly gelişmiş kimlik doğrulama senaryolarını işlemek için özel parametrelerle çalışma zamanında dinamik kimlik doğrulama istekleri oluşturmayı destekler.
Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- Güvenli ASP.NET Çekirdeği Blazor WebAssembly
- ASP.NET Core Blazor WebAssembly ek güvenlik senaryoları
Blazor WebAssembly hata ayıklama geliştirmeleri
Blazor WebAssembly hata ayıklama aşağıdaki geliştirmeleri içerir:
- Kullanıcı kodundan olmayan tür üyelerini göstermek veya gizlemek için Yalnızca Benim Kodum ayarı için destek.
- Çok boyutlu dizileri inceleme desteği.
- Çağrı Yığını artık zaman uyumsuz yöntemler için doğru adı gösteriyor.
- geliştirilmiş ifade değerlendirmesi.
- Türetilmiş üyelerde anahtar sözcüğün
new
doğru işlenmesi. - içinde
System.Diagnostics
hata ayıklayıcıyla ilgili öznitelikler için destek.
System.Security.Cryptography
WebAssembly'de destek
.NET 6, WebAssembly üzerinde çalışırken SHA karma algoritmaları ailesini desteklemektedir. .NET 7, mümkün olduğunda 'den SubtleCryptoyararlanarak ve kullanılamadığında SubtleCrypto .NET uygulamasına geri dönerek daha fazla şifreleme algoritması sağlar. .NET 7'de WebAssembly'de aşağıdaki algoritmalar desteklenir:
- SHA1
- SHA256
- SHA384
- SHA512
- HMACSHA1
- HMACSHA256
- HMACSHA384
- HMACSHA512
- AES-CBC
- PBKDF2
- HKDF
Daha fazla bilgi için bkz . Browser-wasm'i hedefleyen geliştiriciler Web Şifreleme API'lerini (dotnet/runtime #40074) kullanabilir.
Özel doğrulama özniteliklerine hizmet ekleme
Artık hizmetleri özel doğrulama özniteliklerine ekleyebilirsiniz.
Blazor , hizmet sağlayıcısı olarak kullanılabilmesi için öğesini ayarlar ValidationContext
.
Daha fazla bilgi için bkz . ASP.NET Core Blazor form doğrulaması.
Input*
dışındaki bileşenler EditContext
/EditForm
Yerleşik giriş bileşenleri artık bileşen işaretlemesindeki Razor bir formun dışında destekleniyor.
Daha fazla bilgi için bkz . ASP.NET Core Blazor giriş bileşenleri.
Proje şablonu değişiklikleri
.NET 6 geçen yıl yayımlandığında, sayfanın (_Host
) HTML işaretlemesi Pages/_Host.chstml
sayfa ile .NET 6 _Host
proje şablonundaki yeni _Layout
bir sayfa (Pages/_Layout.chstml
) arasında Blazor Server bölündü.
.NET 7'de, HTML işaretlemesi proje şablonlarındaki _Host
sayfayla yeniden birleştirilmiş.
Proje şablonlarında Blazor birkaç ek değişiklik yapıldı. Belgelerde şablonlara yapılan her değişikliği listelemek mümkün değildir. Tüm değişiklikleri benimsemek için bir uygulamayı .NET 7'ye geçirmek için bkz . ASP.NET Core 6.0'dan 7.0'a geçiş.
Deneysel QuickGrid
bileşen
QuickGrid
Yeni bileşen, en yaygın gereksinimler için ve veri kılavuzu bileşenleri oluşturan Blazor herkes için başvuru mimarisi ve performans temeli olarak kullanışlı bir veri kılavuzu bileşeni sağlar.
Daha fazla bilgi için bkz. ASP.NET Core Blazor 'QuickGrid' bileşen.
Canlı tanıtım: Blazor örnek uygulama içinQuickGrid
Sanallaştırma geliştirmeleri
.NET 7'de sanallaştırma geliştirmeleri:
- Bileşen
Virtualize
, başka bir öğeninoverflow-y: scroll
uygulanmasına alternatif olarak belgenin kendisini kaydırma kökü olarak kullanmayı destekler. -
Virtualize
Bileşen belirli bir alt etiket adı gerektiren bir öğenin içine yerleştirilirse,SpacerElement
sanallaştırma ara çubuğu etiket adını almanıza veya ayarlamanıza olanak tanır.
Daha fazla bilgi için Sanallaştırma makalesinin aşağıdaki bölümlerine bakın:
MouseEventArgs
Güncelleştirme
MovementX
ve MovementY
öğesine MouseEventArgs
eklendi.
Daha fazla bilgi için bkz . ASP.NET Core Blazor olay işleme.
Yeni Blazor yükleme sayfası
Proje şablonu, Blazor WebAssembly uygulamayı yükleme işleminin ilerleme durumunu gösteren yeni bir yükleme kullanıcı arabirimine sahiptir.
Daha fazla bilgi için bkz . ASP.NET Core Blazor başlatma.
uygulamasında kimlik doğrulaması için geliştirilmiş tanılama Blazor WebAssembly
Uygulamalarda kimlik doğrulaması sorunlarını tanılamaya Blazor WebAssembly yardımcı olmak için ayrıntılı günlük kaydı sağlanır.
Daha fazla bilgi için bkz . ASP.NET Çekirdek Blazor günlüğü.
WebAssembly'de JavaScript birlikte çalışma
JavaScript birlikte çalışma API'si [JSImport]
/[JSExport]
, .NET'i Blazor WebAssembly içinde ve JavaScript tabanlı uygulamalarda kullanmaya yönelik yeni bir alt düzey mekanizmadır. Bu yeni JavaScript birlikte çalışma zamanı özelliğiyle, .NET WebAssembly çalışma zamanını kullanarak JavaScript'ten .NET kodunu çağırabilir ve UI bileşen modeline bağımlılık Blazor olmadan .NET'ten JavaScript işlevselliğine çağrı yapabilirsiniz.
Daha fazla bilgi için:
- JavaScript JSImport/JSExport ASP.NET Core Blazorile birlikte çalışma: Yalnızca uygulamalara yöneliktir Blazor WebAssembly .
- .NET WebAssembly'de '[JSImport]'/'[JSExport]' JavaScript birlikte çalışabilir: Yalnızca kullanıcı arabirimi bileşen modeline bağımlı olmayan JavaScript uygulamalarına Blazor bağlıdır.
Kimlik doğrulama durumu sağlayıcısının koşullu kaydı
.NET 7'nin yayımlanmasından önce, AuthenticationStateProvider
ile AddScoped
hizmet kapsayıcısına kaydedilmişti. Bu, özel bir uygulama sağlarken belirli bir hizmet kaydı sırasını zorladığı için uygulamalarda hata ayıklamayı zorlaştırdı. Zaman içindeki iç çerçeve değişiklikleri nedeniyle, ile kaydolmak AuthenticationStateProvider
AddScoped
artık gerekli değildir.
Geliştirici kodunda, kimlik doğrulama durumu sağlayıcısı hizmet kaydında aşağıdaki değişikliği yapın:
- builder.Services.AddScoped<AuthenticationStateProvider, ExternalAuthStateProvider>();
+ builder.Services.TryAddScoped<AuthenticationStateProvider, ExternalAuthStateProvider>();
Yukarıdaki örnekte geliştiricinin ExternalAuthStateProvider
hizmet uygulaması verilmiştir.
.NET WebAssembly derleme araçlarında geliştirmeler
.NET 7 için iş yükünde wasm-tools
performansı geliştirmeye ve özel durumları işlemeye yardımcı olan yeni özellikler:
- WebAssembly Tek Yönergesi, Birden Çok Veri (SIMD) desteği (yalnızca AOT ile, Apple Safari tarafından desteklenmez)
- WebAssembly özel durum işleme desteği
Daha fazla bilgi için bkz . ASP.NET Core Blazor WebAssembly derleme araçları ve önceden (AOT) derleme.
Blazor Hybrid
Dış URL'ler
Dış web sayfalarının tarayıcıda açılmasına izin veren bir seçenek eklendi.
Daha fazla bilgi için bkz . ASP.NET Temel Blazor Hybrid yönlendirme ve gezinti.
Güvenlik
Güvenlik senaryoları için Blazor Hybrid yeni yönergeler sağlanır. Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- ASP.NET Core Blazor Hybrid kimlik doğrulaması ve yetkilendirme
- ASP.NET Core Blazor Hybrid güvenliğiyle ilgili dikkat edilmesi gerekenler
Performans
Çıkış önbelleğe alma ara yazılımı
Çıktı önbelleğe alma, bir web uygulamasından gelen yanıtları depolayan ve bunları her seferinde bilgi işlemden ziyade önbellekten sunan yeni bir ara yazılımdır. Çıktı önbelleğe alma, yanıt önbelleğe almadan aşağıdaki yollarla farklıdır:
- Önbelleğe alma davranışı sunucuda yapılandırılabilir.
- Önbellek girdileri program aracılığıyla geçersiz kılınabilir.
- Kaynak kilitleme, önbellek damgalama ve sürüde gök gürültüsü oluşturma riskini azaltır.
- Önbellek yeniden doğrulama, sunucunun önbelleğe alınmış yanıt gövdesi yerine http
304 Not Modified
durum kodu döndürebileceği anlamına gelir. - Önbellek depolama ortamı genişletilebilir.
Daha fazla bilgi için bkz . Önbelleğe alma ve Çıktı önbelleğe alma ara yazılımına genel bakış.
HTTP/3 geliştirmeleri
Bu sürüm:
- HTTP/3'ün ASP.NET Core tarafından tamamen desteklenmesine neden olur, artık deneysel değildir.
- Kestrel'nin HTTP/3 desteğini geliştirir. geliştirmenin iki ana alanı, HTTP/1.1 ve HTTP/2 ile özellik eşliği ve performanstır.
- HTTP/3 ile için UseHttps(ListenOptions, X509Certificate2) tam destek sağlar. KestrelBağlantı sertifikalarını yapılandırmak için Sunucu Adı Göstergesi'ne (SNI) bağlanma gibi gelişmiş seçenekler sunar.
- HTTP.sys ve IIS'de HTTP/3 desteği ekler.
Aşağıdaki örnekte TLS seçeneklerini çözmek için SNI geri çağırmanın nasıl kullanılacağı gösterilmektedir:
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Https;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
options.ListenAnyIP(8080, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps(new TlsHandshakeCallbackOptions
{
OnConnection = context =>
{
var options = new SslServerAuthenticationOptions
{
ServerCertificate =
MyResolveCertForHost(context.ClientHelloInfo.ServerName)
};
return new ValueTask<SslServerAuthenticationOptions>(options);
},
});
});
});
HTTP/3 ayırmalarını azaltmak için .NET 7'de önemli çalışmalar yapıldı. Bu iyileştirmelerden bazılarını aşağıdaki GitHub pr'lerinde görebilirsiniz:
- HTTP/3: İstek başına iptal belirteci ayırmalarından kaçının
- HTTP/3: ConnectionAbortedException ayırmalarından kaçının
- HTTP/3: ValueTask havuzu
HTTP/2 Performans geliştirmeleri
.NET 7, HTTP/2 isteklerini nasıl Kestrel işlediğine ilişkin önemli bir yeniden mimari sağlar. http/2 bağlantıları yoğun olan ASP.NET Core uygulamaları daha az CPU kullanımı ve daha yüksek aktarım hızıyla karşılaşır.
Daha önce HTTP/2 çoğullama uygulaması, hangi isteğin temel TCP bağlantısına yazabileceğini denetleyen bir kilit kullanırdı. yazma kilidinin yerini iş parçacığı güvenli bir kuyruk alır. Şimdi, yazma kilidini hangi iş parçacığının kullanabileceğiyle mücadele etmek yerine istekler artık sıraya alınıyor ve ayrılmış bir tüketici bunları işliyor. Daha önce boşa harcanan CPU kaynakları uygulamanın geri kalanında kullanılabilir.
Bu iyileştirmelerin fark edilebileceği bir yer, HTTP/2 kullanan popüler bir RPC çerçevesi olan gRPC'dir. Kestrel + gRPC karşılaştırmaları önemli bir gelişme gösteriyor:
HTTP/2 çerçeve yazma kodunda, tek bir HTTP/2 bağlantısında veri yazmaya çalışan birden çok akış olduğunda performansı geliştiren değişiklikler yapıldı. Artık TLS çalışmalarını iş parçacığı havuzuna gönderiyoruz ve diğer akışların verilerini yazmak için edinebileceği bir yazma kilidini daha hızlı bir şekilde serbest bırakıyoruz. Bekleme sürelerindeki azalma, bu yazma kilidi için çekişme olduğu durumlarda önemli performans geliştirmeleri sağlayabilir. Tek bir bağlantıda (TLS ile) 70 akışa sahip bir gRPC karşılaştırması, bu değişiklikle saniye başına isteklerde (RPS) yaklaşık %15'lik bir gelişme gösterdi.
Http/2 WebSockets desteği
.NET 7, Kestrel ile, SignalRJavaScript istemcisi ve SignalR için Blazor WebAssemblyHTTP/2 desteği üzerinden WebSockets'i tanıtır.
HTTP/2 üzerinden WebSockets kullanmak aşağıdaki gibi yeni özelliklerden yararlanır:
- Üst bilgi sıkıştırma.
- Sunucuya birden çok istekte bulunurken gereken süreyi ve kaynakları azaltan çoğullama.
Bu desteklenen özellikler tüm HTTP/2 özellikli platformlarda Kestrel kullanılabilir. Sürüm anlaşması tarayıcılarda ve Kestrel'de otomatiktir, bu nedenle yeni API'ler gerekmez.
Daha fazla bilgi için bkz . Http/2 WebSockets desteği.
Kestrel yüksek çekirdek makinelerde performans iyileştirmeleri
Kestrel birçok amaçla kullanılır ConcurrentQueue<T> . Bir amaç, G/Ç işlemlerini 'nin varsayılan Yuva taşımasında Kestrelzamanlamaktır. ile ilişkili yuvaya göre bölümleme ConcurrentQueue
çekişmesini azaltır ve birçok CPU çekirdeğine sahip makinelerde aktarım hızını artırır.
.NET 6'daki yüksek çekirdek makinelerde profil oluşturma işlemi, KestrelConcurrentQueue
bayt arabelleklerini önbelleğe almak için kullanılan diğer PinnedMemoryPool
örneklerden birinde Kestrelönemli bir çekişme gösterdi.
.NET 7'de bellek havuzu G Kestrel/Ç kuyruğuyla aynı şekilde bölümlenmiştir ve bu da yüksek çekirdek makinelerde çok daha düşük çekişmeye ve daha yüksek aktarım hızına yol açar. 80 çekirdekli ARM64 VM'lerinde TechEmpower düz metin karşılaştırmasında saniye başına yanıtlarda (RPS) %500'den fazla gelişme görüyoruz. 48 Çekirdekli AMD VM'lerde, HTTPS JSON karşılaştırmamızda iyileştirme neredeyse %100'dür.
ServerReady
başlangıç zamanını ölçmek için olay
EventSource kullanan uygulamalar, başlangıç performansını anlamak ve iyileştirmek için başlangıç süresini ölçebilir. içindeki ServerReady
yeni Microsoft.AspNetCore.Hosting olay, sunucunun isteklere yanıt vermeye hazır olduğu noktayı temsil eder.
Sunucu
Başlangıç zamanını ölçmek için yeni ServerReady olayı
Olay, ServerReady
ASP.NET Core uygulamalarının başlangıç süresini ölçmek için eklenmiştir.
IIS
IIS'de gölge kopyalama
IIS için ASP.NET Çekirdek Modülü'ne (ANCM) gölge kopyalama uygulaması derlemeleri, uygulamayı çevrimdışı dosya dağıtarak durdurmaktan daha iyi bir son kullanıcı deneyimi sağlayabilir.
Daha fazla bilgi için bkz . IIS'de gölge kopyalama.
Çeşitli
Kestrel tam sertifika zinciri geliştirmeleri
HttpsConnectionAdapterOptions, X509Certificate2Collection türünde yeni bir ServerCertificateChain özelliğine sahiptir. Bu özellik, ara sertifikaları içeren tam bir zincir belirtilmesine izin vererek sertifika zincirlerini doğrulamayı kolaylaştırır. Diğer ayrıntılar için bkz . dotnet/aspnetcore#21513 .
dotnet watch
dotnet watch için geliştirilmiş konsol çıkışı
dotnet watch'un konsol çıkışı, ASP.NET Core'un günlüğe kaydedilmesine daha iyi uyum sağlamak ve emojilerle 😮😍öne çıkmak için geliştirilmiştir.
İşte yeni çıkışın nasıl göründüğüne ilişkin bir örnek:
Daha fazla bilgi için bu GitHub çekme isteğine bakın.
Dotnet watch'ı kaba düzenlemeler için her zaman yeniden başlatacak şekilde yapılandırma
Kaba düzenlemeler, sık erişimli yeniden yüklenebilen düzenlemelerdir. Dotnet watch'u kaba düzenlemeler istenmeden her zaman yeniden başlatacak şekilde yapılandırmak için ortam değişkenini DOTNET_WATCH_RESTART_ON_RUDE_EDIT
olarak true
ayarlayın.
Geliştirici özel durum sayfası koyu mod
Patrick Westerhof'un katkıları sayesinde geliştirici özel durum sayfasına koyu mod desteği eklendi. Tarayıcıda koyu modu test etmek için geliştirici araçları sayfasında modu koyu olarak ayarlayın. Örneğin, Firefox'ta:
Chrome'da:
Üst düzey deyimler yerine Program.Main yöntemini kullanmak için proje şablonu seçeneği
.NET 7 şablonları, üst düzey deyimleri kullanmama içerir.
.NET CLI'yı kullanarak şu --use-program-main
seçeneği kullanın:
dotnet new web --use-program-main
Visual Studio ile proje oluşturma sırasında yeni Üst düzey deyimleri kullanma onay kutusunu seçin:
Güncelleştirilmiş Angular ve React şablonları
Angular proje şablonu Angular 14 olarak güncelleştirildi. React proje şablonu React 18.2 olarak güncelleştirildi.
dotnet user-jwts ile geliştirme aşamasında JSON Web Belirteçlerini yönetme
Yeni dotnet user-jwts
komut satırı aracı, uygulamaya özgü yerel JSON Web Belirteçleri (JWT) oluşturabilir ve yönetebilir. Daha fazla bilgi için bkz . Geliştirme aşamasındaki JSON Web Belirteçlerini dotnet user-jwts ile yönetme.
W3CLogger'da ek istek üst bilgileri desteği
Artık üzerinde arayarak AdditionalRequestHeaders()
W3CLoggerOptionsW3C günlükçü kullanırken günlüğe kaydedilecek ek istek üst bilgileri belirtebilirsiniz:
services.AddW3CLogging(logging =>
{
logging.AdditionalRequestHeaders.Add("x-forwarded-for");
logging.AdditionalRequestHeaders.Add("x-client-ssl-protocol");
});
Daha fazla bilgi için bkz . W3CLogger seçenekleri.
Sıkıştırmayı açma isteği
Yeni İstek sıkıştırması açma ara yazılımı:
- API uç noktalarının sıkıştırılmış içeriğe sahip istekleri kabul etmelerini sağlar.
-
Content-Encoding
Sıkıştırılmış içerik içeren istekleri otomatik olarak tanımlamak ve sıkıştırmasını açmak için HTTP üst bilgisini kullanır. - Sıkıştırılmış istekleri işlemek için kod yazma gereksinimini ortadan kaldırır.
Daha fazla bilgi için bkz . Sıkıştırmayı kaldırma ara yazılımı isteme.
ASP.NET Core