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:
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 etttype
nyckelord vars värde är en matris som innehållernull
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.
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:
- Den har inte avsnittet värd eller myndighet.
- Den har en absolut sökväg.
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!
Relaterat innehåll
ASP.NET Core