Dela via


Nyheter i ASP.NET Core 10.0

Den här artikeln belyser de viktigaste ändringarna i ASP.NET Core 10.0 med länkar till relevant dokumentation.

Den här artikeln uppdateras när nya förhandsversioner görs tillgängliga. Se Asp.Net Core-meddelandesidan tills den här sidan har uppdaterats.

Blazor

I det här avsnittet beskrivs nya funktioner för Blazor.

QuickGrid RowClass parameter

Använd en formatmallsklass på en rad i rutnätet baserat på radobjektet med hjälp av den nya parametern RowClass. I följande exempel anropas metoden GetRowCssClass på varje rad för att villkorligt tillämpa en formatmallsklass baserat på radobjektet:

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

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

Mer information finns i ASP.NET Core Blazor komponentenQuickGrid.

Blazor skript som statisk webbtillgång

I tidigare versioner av .NET hanteras Blazor-skriptet från en inbäddad resurs i det delade ramverket ASP.NET Core. I .NET 10 eller senare hanteras Blazor-skriptet som en statisk webbtillgång med automatisk komprimering och fingeravtryck.

Mer information finns i följande resurser:

Höjdpunkter i routemall

Attributet [Route] stöder nu vägsyntaxmarkering för att visualisera strukturen för routningsmallen:

Route-mallmönster för ett routningsattribut för räknarvärdet visar syntaxmarkering

SignalR

I det här avsnittet beskrivs nya funktioner för SignalR.

Minimala API:er

I det här avsnittet beskrivs nya funktioner för minimala API:er.

OpenAPI

I det här avsnittet beskrivs nya funktioner för OpenAPI.

OpenAPI 3.1-stöd

ASP.NET Core har lagt till stöd för att generera OpenAPI version 3.1 dokument i .NET 10. Trots den lägre versionshöjningen är OpenAPI 3.1 en betydande uppdatering av OpenAPI-specifikationen, särskilt med fullt stöd för JSON-schemautkast 2020-12.

Några av de ändringar som visas i det genererade OpenAPI-dokumentet är:

  • Nullbara typer har inte längre egenskapen nullable: true i schemat.
  • I stället för en nullable: true-egenskap har de ett type nyckelord vars värde är en matris som innehåller null som en av typerna.

Med den här funktionen är standardversionen av OpenAPI för genererade dokument3.1. Versionen kan ändras genom att uttryckligen ange egenskapen OpenApiVersion för OpenApiOptions i parametern configureOptions delegate för AddOpenApi.

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

När du genererar OpenAPI-dokumentet vid bygget kan du välja OpenAPI-versionen genom att ange --openapi-version i det OpenApiGenerateDocumentsOptions MSBuild-objektet.

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

OpenAPI 3.1-stöd lades främst till i följande PR.

Icke bakåtkompatibla ändringar i OpenAPI 3.1

Stöd för OpenAPI 3.1 kräver en uppdatering av det underliggande OpenAPI.NET-biblioteket till en ny huvudversion, 2.0. Den nya versionen har vissa störande förändringar jämfört med den tidigare versionen. De kompatibilitetsbrytande ändringarna kan påverka appar om de har några dokument-, operations- eller schematransformatorer.

En av de viktigaste ändringarna är att klassen OpenApiAny har tagits bort till förmån för att använda JsonNode direkt. Transformatorer som använder OpenApiAny måste uppdateras för att använda JsonNode. Följande diff visar ändringarna i schematransformator från .NET 9 till .NET 10:

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;
});

Observera att dessa ändringar är nödvändiga även när du bara konfigurerar OpenAPI-versionen till 3.0.

OpenAPI i Yaml

ASP.NET stöder nu servering av det genererade OpenAPI-dokumentet i YAML-format. YAML kan vara mer kortfattat än JSON, vilket eliminerar klammerparenteser och citattecken när dessa kan härledas. YAML stöder även flerradssträngar, vilket kan vara användbart för långa beskrivningar.

Om du vill konfigurera en app för att hantera det genererade OpenAPI-dokumentet i YAML-format anger du slutpunkten i MapOpenApi-anropet med suffixet ".yaml" eller ".yml", som du ser i följande exempel:

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

Stöd för:

  • YAML är för närvarande endast tillgängligt för OpenAPI som hanteras från OpenAPI-slutpunkten.
  • Generering av OpenAPI-dokument i YAML-format vid byggtid läggs till i en framtida förhandsversion.

Se PR som lade till stöd för att tillhandahålla det genererade OpenAPI-dokumentet i YAML-format.

Svarsbeskrivning för ProducesResponseType

Attributet ProducesAttribute, ProducesResponseTypeAttributeoch ProducesDefaultResponseType accepterar nu en valfri strängparameter, Description, som anger svarets beskrivning. Här är ett exempel:

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

Och den genererade OpenAPI-specifikationen:

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

gemenskapsbidrag av Sander ten Brinke🙏

Autentisering och auktorisering

I det här avsnittet beskrivs nya funktioner för autentisering och auktorisering.

Diverse

I det här avsnittet beskrivs diverse nya funktioner i ASP.NET Core 10.0.

Bättre stöd för att testa appar med instruktioner på toppnivå

.NET 10 har nu bättre stöd för att testa appar som använder toppnivåinstruktioner. Tidigare var utvecklare tvungna att manuellt lägga till public partial class Program i Program.cs-filen så att testprojektet kunde referera till Program class. public partial class Program krävdes eftersom den översta instruktionsfunktionen i C# 9 genererade en Program class som deklarerades som intern.

I .NET 10 används en källgenerator för att generera public partial class Program-deklarationen om programmeraren inte deklarerade den explicit. Dessutom lades en analysator till för att identifiera när public partial class Program uttryckligen deklareras och råder utvecklaren att ta bort den.

Bild

Följande PR:er har bidragit till denna funktionalitet:

Identifiera om URL:en är lokal med hjälp av RedirectHttpResult.IsLocalUrl

Använd den nya hjälpmetoden RedirectHttpResult.IsLocalUrl(url) för att identifiera om en URL är lokal. En URL anses vara lokal om följande är sant:

URL:er som använder virtuella sökvägar"~/" är också lokala.

IsLocalUrl är användbart för att verifiera URL:er innan du omdirigerar till dem för att förhindra öppna omdirigeringsattacker.

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

Tack @martincostello för detta bidrag!