Wat is er nieuw in ASP.NET Core 10.0
In dit artikel worden de belangrijkste wijzigingen in ASP.NET Core 10.0 beschreven met koppelingen naar relevante documentatie.
Dit artikel wordt bijgewerkt naarmate er nieuwe preview-versies beschikbaar worden gesteld. Zie de Asp.Net Core-aankondigingspagina totdat deze pagina is bijgewerkt.
Blazor
In deze sectie worden nieuwe functies voor Blazorbeschreven.
parameter QuickGridRowClass
Pas een opmaakmodelklasse toe op een rij van de grid op basis van het item van de rij met behulp van de nieuwe parameter RowClass
. In het volgende voorbeeld wordt de methode GetRowCssClass
aangeroepen op elke rij om voorwaardelijk een stijlklasse toe te passen op basis van het item in de rij.
<QuickGrid ... RowClass="GetRowCssClass">
...
</QuickGrid>
@code {
private string GetRowCssClass(MyGridItem item) =>
item.IsArchived ? "row-archived" : null;
}
Zie ASP.NET Core BlazorQuickGridcomponentvoor meer informatie.
Blazor script als statisch webbestand
In eerdere versies van .NET wordt het Blazor-script geleverd vanuit een ingesloten resource in het gedeelde ASP.NET Core-framework. In .NET 10 of hoger wordt het Blazor-script geleverd als een statische webasset met automatische compressie en vingerafdruk.
Zie de volgende bronnen voor meer informatie:
Hoogtepunten van routesjabloon
Het kenmerk [Route]
ondersteunt nu markering van routesyntaxis om de structuur van de routesjabloon te visualiseren:
SignalR
In deze sectie worden nieuwe functies voor SignalRbeschreven.
Minimale APIs
In deze sectie worden nieuwe functies voor minimale API's beschreven.
OpenAPI
In deze sectie worden nieuwe functies voor OpenAPI beschreven.
Ondersteuning voor OpenAPI 3.1
ASP.NET Core heeft ondersteuning toegevoegd voor het genereren van OpenAPI versie 3.1 documenten in .NET 10. Ondanks de kleine versie-increment is OpenAPI 3.1 een belangrijke update van de OpenAPI-specificatie, met name met volledige ondersteuning voor JSON Schema draft 2020-12.
Enkele van de wijzigingen die u in het gegenereerde OpenAPI-document ziet, zijn:
- Nullable typen hebben niet meer de
nullable: true
eigenschap in het schema. - In plaats van een
nullable: true
eigenschap hebben ze eentype
trefwoord waarvan de waarde een matrix is dienull
bevat als een van de typen.
Met deze functie wordt de standaardVersie van OpenAPI voor gegenereerde documenten3.1
. De versie kan worden gewijzigd door de eigenschap OpenApiVersion van de OpenApiOptions- in de gedelegeerde parameter configureOptions
van AddOpenApi-expliciet in te stellen.
builder.Services.AddOpenApi(options =>
{
// Specify the OpenAPI version to use.
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});
Wanneer u het OpenAPI-document tijdens de build genereert, kan de OpenAPI-versie worden geselecteerd door de --openapi-version
in te stellen in het OpenApiGenerateDocumentsOptions
MSBuild-item.
<!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
<OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>
Ondersteuning voor OpenAPI 3.1 werd vooral toegevoegd in de volgende PR.
Breekende wijzigingen in OpenAPI 3.1
Ondersteuning voor OpenAPI 3.1 vereist een update naar de onderliggende OpenAPI.NET-bibliotheek naar een nieuwe primaire versie, 2.0. Deze nieuwe versie heeft enkele belangrijke wijzigingen ten opzichte van de vorige versie. De ingrijpende wijzigingen kunnen van invloed zijn op apps als deze document-, bewerking- of schematransformaties hebben.
Een van de belangrijkste wijzigingen is dat de OpenApiAny
klasse is verwijderd ten gunste van het rechtstreeks gebruiken van JsonNode
. Transformatoren die gebruikmaken van OpenApiAny
moeten worden bijgewerkt om JsonNode
te kunnen gebruiken. In de volgende diff ziet u de wijzigingen in de schematransformator van .NET 9 naar .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;
});
Houd er rekening mee dat deze wijzigingen nodig zijn, zelfs wanneer alleen de OpenAPI-versie wordt geconfigureerde naar 3.0.
OpenAPI in Yaml
ASP.NET biedt nu ondersteuning voor het leveren van het gegenereerde OpenAPI-document in YAML-indeling. YAML kan beknopter zijn dan JSON, waarbij accolades en aanhalingstekens worden geëlimineerd wanneer deze kunnen worden afgeleid. YAML ondersteunt ook tekenreeksen met meerdere regels, wat handig kan zijn voor lange beschrijvingen.
Als u een app wilt configureren voor het gegenereerde OpenAPI-document in YAML-indeling, geeft u het eindpunt op in de MapOpenApi-aanroep met het achtervoegsel '.yaml' of '.yml', zoals wordt weergegeven in het volgende voorbeeld:
app.MapOpenApi("/openapi/{documentName}.yaml");
Ondersteuning voor:
- YAML is momenteel alleen beschikbaar voor de OpenAPI die wordt geleverd vanuit het OpenAPI-eindpunt.
- Het genereren van OpenAPI-documenten in YAML-indeling tijdens de build wordt toegevoegd in een toekomstige preview.
Zie deze PR die ondersteuning heeft toegevoegd voor het uitserveren van het gegenereerde OpenAPI-document in YAML-formaat.
Beschrijving van de reactie op ProducesResponseType
De ProducesAttribute, ProducesResponseTypeAttributeen ProducesDefaultResponseType kenmerken accepteren nu een optionele tekenreeksparameter, Description
, waarmee de beschrijving van het antwoord wordt ingesteld. Hier volgt een voorbeeld:
[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{
En de gegenereerde OpenAPI:
"responses": {
"200": {
"description": "The weather forecast for the next 5 days.",
"content": {
Gemeenschapsbijdrage door Sander ten Brinke🙏
Verificatie en autorisatie
In deze sectie worden nieuwe functies voor verificatie en autorisatie beschreven.
Allerlei
In deze sectie worden diverse nieuwe functies in ASP.NET Core 10.0 beschreven.
Betere ondersteuning voor het testen van apps met instructies op het hoogste niveau
.NET 10 biedt nu betere ondersteuning voor het testen van apps die gebruikmaken van top-level instructies. Voorheen moesten ontwikkelaars handmatig public partial class Program
toevoegen aan het Program.cs
-bestand, zodat het testproject naar de Program class
kon verwijzen.
public partial class Program
was nodig omdat de top-level statement functie in C# 9 een Program class
heeft gegenereerd die is gedeclareerd als interne.
In .NET 10 wordt een brongenerator gebruikt om de declaratie public partial class Program
te genereren als de programmeur deze niet expliciet heeft gededeclaratie. Daarnaast is er een analyse toegevoegd om te detecteren wanneer public partial class Program
expliciet wordt gedeclareerd en adviseert de ontwikkelaar om deze te verwijderen.
De volgende pull-aanvragen hebben aan deze functionaliteit bijgedragen:
Detecteren of een URL lokaal is met RedirectHttpResult.IsLocalUrl
Gebruik de nieuwe RedirectHttpResult.IsLocalUrl(url)
helpermethode om te detecteren of een URL lokaal is. Een URL wordt beschouwd als lokaal als het volgende waar is:
- Het bevat geen host- of authoriteitgedeelte.
- Het heeft een absoluut pad.
URL's die gebruikmaken van virtuele paden"~/"
zijn ook lokaal.
IsLocalUrl
is handig voor het valideren van URL's voordat u ze omleidt om open omleidingsaanvallente voorkomen.
if (RedirectHttpResult.IsLocalUrl(url))
{
return Results.LocalRedirect(url);
}
Bedankt @martincostello voor deze bijdrage!