Udostępnij za pośrednictwem


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:

Wzorzec szablonu trasy atrybutu trasy dla wartości licznika pokazuje wyróżnianie składni

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 kluczowe type, 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 configureOptionsAddOpenApi.

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.

Obraz

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:

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!