Aracılığıyla paylaş


ASP.NET Core 10.0'daki yenilikler

Bu makalede, ASP.NET Core 10.0'daki en önemli değişiklikler, ilgili belgelerin bağlantıları ile vurgulanır.

Yeni önizleme sürümleri kullanıma sunuldukçe bu makale güncelleştirilecektir. Bu sayfa güncelleştirilene kadar Asp.Net Core duyuru sayfasına bakın.

Blazor

Bu bölümde Blazoriçin yeni özellikler açıklanmaktadır.

QuickGrid RowClass parametresi

Yeni RowClass parametresini kullanarak satır öğesine göre kılavuzda bir satıra stil sınıfı uygulayın. Aşağıdaki örnekte, satır öğesini temel alan bir stil sayfası sınıfını koşullu olarak uygulamak için her satırda GetRowCssClass yöntemi çağrılır:

<QuickGrid ... RowClass="GetRowCssClass">
    ...
</QuickGrid>

@code {
    private string GetRowCssClass(MyGridItem item) =>
        item.IsArchived ? "row-archived" : null;
}

Daha fazla bilgi için bkz. ASP.NET Core Blazor 'QuickGrid' bileşen.

Blazor betiğini statik bir web varlığı olarak kullanmak

.NET'in önceki sürümlerinde, Blazor betiği ASP.NET Core paylaşılan çerçevesine gömülü bir kaynaktan sunuluyordu. .NET 10 veya sonraki sürümlerinde, Blazor betiği otomatik sıkıştırma ve parmak izi ile statik bir web varlığı olarak sunulur.

Daha fazla bilgi için aşağıdaki kaynaklara bakın:

Yol şablonu vurguları

[Route] özniteliği artık yol şablonunun yapısını görselleştirmeye yardımcı olmak için yol söz dizimi vurgulama özelliğini destekliyor:

Sayaç değeri için yol özniteliğinin yol şablonu deseni, söz dizimi vurgulamasını gösterir .

SignalR

Bu bölümde SignalRiçin yeni özellikler açıklanmaktadır.

Minimum API'ler

Bu bölümde en düşük API'lere yönelik yeni özellikler açıklanmaktadır.

OpenAPI

Bu bölümde OpenAPI'nin yeni özellikleri açıklanmaktadır.

OpenAPI 3.1 desteği

ASP.NET Core, .NET 10'da OpenAPI sürüm 3.1 belgeleri oluşturmaya yönelik destek ekledi. Küçük sürüm artışına rağmen, OpenAPI 3.1, OpenAPI belirtiminde önemli bir güncellemeyle birlikte gelir ve özellikle JSON Şema taslağı 2020-12için tam destek sağlar.

Oluşturulan OpenAPI belgesinde göreceğiniz bazı değişiklikler şunlardır:

  • Nullable türler artık şemada nullable: true özelliğine sahip değil.
  • nullable: true özelliği yerine, değeri türlerden biri olarak type'yi içeren bir dizi olan bir null anahtar sözcüğü vardır.

Bu özellik sayesinde, oluşturulan belgeler için varsayılan OpenAPI sürümü3.1. Sürüm, AddOpenApi temsilci parametresindeki OpenApiVersion özelliği açıkça ayarlanarak değiştirilebilir.

builder.Services.AddOpenApi(options =>
{
    // Specify the OpenAPI version to use.
    options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});

Derleme zamanında OpenAPI belgesi oluşturulurken, --openapi-version MSBuild öğesinde OpenApiGenerateDocumentsOptions ayarlanarak OpenAPI sürümü seçilebilir.

    <!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
    <OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>

OpenAPI 3.1 desteği öncelikli olarak aşağıdaki PR'da eklenmiştir.

OpenAPI 3.1'de önemli değişiklikler

OpenAPI 3.1 desteği, temel OpenAPI.NET kitaplığının yeni bir ana sürüm olan 2.0'a güncelleştirilmiş olmasını gerektirir. Bu yeni sürümde önceki sürümden ciddi değişiklikler var. Köklü değişiklikler, uygulamalar herhangi bir belge, işlem veya şema dönüştürücüsüne sahipse bu uygulamaları etkileyebilir.

En önemli değişikliklerden biri, OpenApiAny sınıfının yerine doğrudan JsonNode kullanılmasıdır. OpenApiAny kullanan transformatörlerin JsonNodekullanacak şekilde güncelleştirilmiş olması gerekir. Aşağıdaki fark, .NET 9'dan .NET 10'a şema transformatöründeki değişiklikleri gösterir:

options.AddSchemaTransformer((schema, context, cancellationToken) =>
{
    if (context.JsonTypeInfo.Type == typeof(WeatherForecast))
    {
-       schema.Example = new OpenApiObject
+       schema.Example = new JsonObject
        {
-           ["date"] = new OpenApiString(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")),
+           ["date"] = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"),
-           ["temperatureC"] = new OpenApiInteger(0),
+           ["temperatureC"] = 0,
-           ["temperatureF"] = new OpenApiInteger(32),
+           ["temperatureF"] = 32,
-           ["summary"] = new OpenApiString("Bracing"),
+           ["summary"] = "Bracing",
        };
    }
    return Task.CompletedTask;
});

Bu değişikliklerin yalnızca OpenAPI sürümünü 3.0'a uygun hale getirmek için bile gerekli olduğunu unutmayın.

Yaml'de OpenAPI

ASP.NET artık oluşturulan OpenAPI belgesiniN YAML biçiminde sunulmasını destekliyor. YAML, JSON'dan daha öz olabilir ve anlaşılabildiğinde küme ayraçları ile tırnak işaretlerini gereksiz hale getirir. YAML, uzun açıklamalar için yararlı olabilecek çok satırlı dizeleri de destekler.

Bir uygulamayı oluşturulan OpenAPI belgesine YAML biçiminde hizmet vermek üzere yapılandırmak için, aşağıdaki örnekte gösterildiği gibi MapOpenApi çağrısında uç noktayı ".yaml" veya ".yml" sonekiyle belirtin:

app.MapOpenApi("/openapi/{documentName}.yaml");

Destek:

  • YAML şu anda yalnızca OpenAPI uç noktasından sunulan OpenAPI için kullanılabilir.
  • Derleme zamanında YAML biçiminde OpenAPI belgeleri oluşturma işlemi, gelecekteki bir önizlemede eklenir.

Bu PR'yi inceleyin; bu PR, oluşturulan OpenAPI belgesinin YAML formatında sunulmasına destek ekledi.

ProducesResponseType üzerinde yanıt açıklaması

ProducesAttribute, ProducesResponseTypeAttributeve ProducesDefaultResponseType öznitelikleri artık yanıtın açıklamasını ayarlayacak isteğe bağlı bir dize parametresi Descriptionkabul eder. İşte bir örnek:

[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{

Oluşturulan OpenAPI ise:

        "responses": {
          "200": {
            "description": "The weather forecast for the next 5 days.",
            "content": {

Topluluk katkısıSander ten Brinke🙏 tarafından

Kimlik doğrulaması ve yetkilendirme

Bu bölümde kimlik doğrulaması ve yetkilendirmeye yönelik yeni özellikler açıklanmaktadır.

Çeşitli

Bu bölümde, ASP.NET Core 10.0'daki çeşitli yeni özellikler açıklanmaktadır.

Üst düzey deyimlerle uygulamaları test etme için daha iyi destek

.NET 10 artık üst düzey deyimleri kullananuygulamaları test etme desteğine sahiptir. Daha önce geliştiricilerin test projesinin public partial class Program'ye başvurabilmesi için Program.cs dosyasına el ile Program class eklemeleri gerekiyordu. C# 9'daki üst düzey deyim özelliği public partial class Programolarak bildirilen bir Program class oluşturduğundan gerekliydi.

.NET 10'da, programcı açıkça bildirmediyse bildirimini oluşturmak için public partial class Program kullanılır. Ayrıca, public partial class Program açıkça ne zaman bildirildiğini algılamak ve geliştiriciye bunu kaldırmasını önermek için bir çözümleyici eklendi.

Resim

Bu özelliğe eklenen aşağıdaki PR'ler:

RedirectHttpResult.IsLocalUrl kullanarak URL'nin yerel olup olmadığını algılama

URL'nin yerel olup olmadığını algılamak için yeni RedirectHttpResult.IsLocalUrl(url) yardımcı yöntemini kullanın. Aşağıdakiler doğruysa URL yerel olarak kabul edilir:

"~/"sanal yolları kullanan URL'ler de yereldir.

IsLocalUrl, açık yeniden yönlendirme saldırılarınıönlemek için URL'leri yeniden yönlendirmeden önce doğrulamak için yararlıdır.

if (RedirectHttpResult.IsLocalUrl(url))
{
    return Results.LocalRedirect(url);
}

Bu katkı için @martincostello teşekkür ederiz!