Co nowego w programie ASP.NET Core 10.0
W tym artykule przedstawiono najważniejsze zmiany w programie ASP.NET Core 10.0 z linkami do odpowiedniej dokumentacji.
Ten artykuł zostanie zaktualizowany w miarę udostępniania nowych wersji zapoznawczych. Zobacz stronę z ogłoszeniem Asp.Net Core aż do zaktualizowania tej strony.
Blazor
W tej sekcji opisano nowe funkcje Blazor.
parametr QuickGridRowClass
Zastosuj klasę arkusza stylów do wiersza siatki na podstawie elementu wiersza przy użyciu nowego parametru RowClass
. W poniższym przykładzie metoda GetRowCssClass
jest wywoływana w każdym wierszu, aby warunkowo zastosować klasę arkusza stylów na podstawie elementu wiersza:
<QuickGrid ... RowClass="GetRowCssClass">
...
</QuickGrid>
@code {
private string GetRowCssClass(MyGridItem item) =>
item.IsArchived ? "row-archived" : null;
}
Aby uzyskać więcej informacji, zobacz ASP.NET Core Blazor "QuickGrid" składnik.
Blazor skrypt jako statyczny zasób internetowy
W poprzednich wersjach platformy .NET skrypt Blazor jest obsługiwany z zasobu osadzonego w strukturze udostępnionej ASP.NET Core. W programie .NET 10 lub nowszym skrypt Blazor jest obsługiwany jako statyczny zasób internetowy z automatyczną kompresją i odciskiem palca.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
Wyróżnione szablony tras
Atrybut [Route]
obsługuje teraz wyróżnianie składni tras, aby ułatwić wizualizację struktury szablonu trasy:
SignalR
W tej sekcji opisano nowe funkcje SignalR.
Minimalne API
W tej sekcji opisano nowe funkcje dla minimalnych interfejsów API.
OpenAPI
W tej sekcji opisano nowe funkcje interfejsu OpenAPI.
Obsługa interfejsu OpenAPI 3.1
W ASP.NET Core dodano obsługę generowania dokumentów OpenAPI w wersji 3.1 w .NET 10. Pomimo niewielkiej aktualizacji wersji, OpenAPI 3.1 jest znaczącą aktualizacją specyfikacji OpenAPI, w szczególności z pełną obsługą wersji projektu schematu JSON 2020-12.
Niektóre zmiany widoczne w wygenerowanych dokumentach OpenAPI obejmują:
- Typy dopuszczane do wartości null nie mają już właściwości
nullable: true
w schemacie. - Zamiast właściwości
nullable: true
mają słowo kluczowetype
, którego wartość jest tablicą zawierającąnull
jako jeden z typów.
W przypadku tej funkcji domyślna wersja interfejsu OpenAPI dla wygenerowanych dokumentów jest3.1
. Wersję można zmienić, ustawiając jawnie właściwość OpenApiVersion w OpenApiOptions w parametrze delegata configureOptions
AddOpenApi.
builder.Services.AddOpenApi(options =>
{
// Specify the OpenAPI version to use.
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});
Podczas generowania dokumentu OpenAPI w czasie kompilacji można wybrać wersję OpenAPI, ustawiając --openapi-version
w elemencie OpenApiGenerateDocumentsOptions
MSBuild.
<!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
<OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>
Obsługa interfejsu OpenAPI 3.1 została głównie dodana w następującym pull request.
Zmiany łamiące zgodność OpenAPI 3.1
Obsługa interfejsu OpenAPI 3.1 wymaga aktualizacji podstawowej biblioteki OpenAPI.NET do nowej wersji głównej 2.0. Ta nowa wersja ma pewne zmiany wprowadzające niekompatybilności z poprzednią wersją. Zmiany powodujące niezgodność mogą mieć wpływ na te aplikacje, jeśli mają jakiekolwiek transformatory dokumentów, operacji lub schematów.
Jedną z najważniejszych zmian jest to, że klasa OpenApiAny
została odrzucona na rzecz bezpośredniego używania JsonNode
. Aby można było używać OpenApiAny
, należy zaktualizować transformatory używające JsonNode
. Poniżej przedstawiono różnice w transformatorze schematów z .NET 9 na .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;
});
Należy pamiętać, że te zmiany są konieczne nawet wtedy, gdy konfigurujemy wersję OpenAPI do 3.0.
OpenAPI w języku YAML
ASP.NET obsługuje teraz obsługę wygenerowanego dokumentu OpenAPI w formacie YAML. Kod YAML może być bardziej zwięzły niż JSON, eliminując nawiasy klamrowe i znaki cudzysłowu, gdy można je wywnioskować. Język YAML obsługuje również ciągi wielowierszowe, które mogą być przydatne dla długich opisów tekstowych.
Aby skonfigurować aplikację do obsługi wygenerowanego dokumentu OpenAPI w formacie YAML, określ punkt końcowy w wywołaniu MapOpenApi z sufiksem ".yaml" lub ".yml", jak pokazano w poniższym przykładzie:
app.MapOpenApi("/openapi/{documentName}.yaml");
Wsparcie dla:
- YAML jest obecnie dostępny tylko dla OpenAPI serwowanego z punktu końcowego OpenAPI.
- Generowanie dokumentów OpenAPI w formacie YAML w czasie kompilacji jest dodawane w przyszłej wersji zapoznawczej.
Zobacz to żądanie zmiany, które dodało obsługę udostępniania wygenerowanego dokumentu OpenAPI w formacie YAML.
Opis odpowiedzi w typie ProducesResponseType
Atrybuty ProducesAttribute, ProducesResponseTypeAttributei ProducesDefaultResponseType atrybuty akceptują teraz opcjonalny parametr ciągu, Description
, który ustawi opis odpowiedzi. Oto przykład:
[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{
Wygenerowana specyfikacja OpenAPI:
"responses": {
"200": {
"description": "The weather forecast for the next 5 days.",
"content": {
wkład wspólnoty przez Sander ten Brinke🙏
Uwierzytelnianie i autoryzacja
W tej sekcji opisano nowe funkcje uwierzytelniania i autoryzacji.
Różne
W tej sekcji opisano różne nowe funkcje w programie ASP.NET Core 10.0.
Lepsza obsługa testowania aplikacji za pomocą instrukcji najwyższego poziomu
Platforma .NET 10 ma teraz lepszą obsługę testowania aplikacji korzystających z instrukcji najwyższego poziomu. Wcześniej deweloperzy musieli ręcznie dodać public partial class Program
do pliku Program.cs
, aby projekt testowy mógł odwoływać się do Program class
.
public partial class Program
była wymagana, ponieważ funkcja deklaracji najwyższego poziomu w języku C# 9 wygenerowała Program class
, która została zadeklarowana jako wewnętrzna.
W programie .NET 10 generator źródła jest używany do generowania deklaracji public partial class Program
, jeśli programista nie zadeklarował go jawnie. Ponadto analizator został dodany do wykrywania, kiedy public partial class Program
jest zadeklarowany jawnie i zaleca deweloperowi jego usunięcie.
Następujące pull requesty przyczyniły się do tej funkcjonalności:
Wykrywanie, czy adres URL jest lokalny przy użyciu RedirectHttpResult.IsLocalUrl
Użyj nowej metody pomocnika RedirectHttpResult.IsLocalUrl(url)
, aby wykryć, czy adres URL jest lokalny. Adres URL jest uznawany za lokalny, jeśli są spełnione następujące warunki:
- Nie ma sekcji hosta ani sekcji autorytetu .
- Ma ścieżkę bezwzględną.
Adresy URL używające ścieżek wirtualnych"~/"
są również lokalne.
IsLocalUrl
przydaje się do sprawdzania poprawności adresów URL przed przekierowaniem do nich, aby zapobiec atakom typu open redirect.
if (RedirectHttpResult.IsLocalUrl(url))
{
return Results.LocalRedirect(url);
}
Dziękujemy @martincostello za ten wkład!