Megosztás a következőn keresztül:


A ASP.NET Core 10.0 újdonságai

Ez a cikk a ASP.NET Core 10.0 legfontosabb változásait emeli ki a vonatkozó dokumentációra mutató hivatkozásokkal.

Ez a cikk az új előzetes verziók elérhetővé tételének megfelelően frissülni fog. A lap frissítéséig tekintse meg a Asp.Net Core bejelentés oldalát.

Blazor

Ez a szakasz a Blazorúj funkcióit ismerteti.

QuickGrid RowClass paraméter

Stíluslaposztály alkalmazása a rács egy sorára a sorelem alapján az új RowClass paraméterrel. Az alábbi példában a GetRowCssClass metódust minden sorban meghívjuk, hogy feltételesen alkalmazzon egy stíluslaposztályt a sorelem alapján:

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

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

További információ: ASP.NET Core Blazor `QuickGrid` összetevő.

Blazor szkript statikus webes objektumként

A .NET korábbi kiadásaiban a Blazor szkript egy beágyazott erőforrásból lesz kiszolgálva a ASP.NET Core megosztott keretrendszerében. A .NET 10-ben vagy újabb verziókban a Blazor szkript statikus webes objektumként szolgál ki automatikus tömörítéssel és ujjlenyomattal.

További információ:

Az útvonalsablon kiemelt pontjai

A [Route] attribútum mostantól támogatja az útvonalszintaxis kiemelését az útvonalsablon szerkezetének megjelenítéséhez:

Egy útvonal-attribútum számláló értékéhez tartozó útvonalsablon-minta szintaxiskiemelést mutat

Blazor Hybrid

Ez a szakasz a Blazor Hybridúj funkcióit ismerteti.

Új .NET MAUIBlazor Hybrid egy Blazor Web App-vel és ASP.NET Core Identity-mal készült cikk és minta

Új cikk és mintaalkalmazás lett hozzáadva .NET MAUIBlazor Hybrid és webalkalmazáshoz ASP.NET Core Identityhasználatával.

További információ:

SignalR

Ez a szakasz a SignalRúj funkcióit ismerteti.

Minimális API-k

Ez a szakasz a minimális API-k új funkcióit ismerteti.

OpenAPI

Ez a szakasz az OpenAPI új funkcióit ismerteti.

OpenAPI 3.1-támogatás

ASP.NET Core támogatást adott hozzá a .NET 10-hez az OpenAPI 3.1-es verziójának létrehozásához. Annak ellenére, hogy az alverziószám növelése, az OpenAPI 3.1 jelentős frissítés az OpenAPI specifikációban, különösen azáltal, hogy teljes körű támogatást nyújt a JSON Schema draft 2020-12-hoz.

A létrehozott OpenAPI-dokumentumban a következő változások láthatók:

  • A null értékű típusok már nem rendelkeznek a séma nullable: true tulajdonságával.
  • A nullable: true tulajdonság helyett egy type kulcsszóval rendelkeznek, amelynek értéke egy olyan tömb, amely null tartalmaz az egyik típusként.

Ezzel a funkcióval a létrehozott dokumentumok alapértelmezett OpenAPI-verziója3.1. A verzió módosítható azáltal, hogy explicit módon beállítja az OpenApiVersion tulajdonságot a(z) OpenApiOptionsconfigureOptions delegált paraméterében a(z) AddOpenApisorán.

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

Az OpenAPI dokumentum generálásakor összeállítási időben az OpenAPI verzió a --openapi-version MSBuild elemben található OpenApiGenerateDocumentsOptions beállításával választható ki.

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

Az OpenAPI 3.1 támogatását elsősorban a következő PR-ben adták hozzá.

3.1-es OpenAPI kompatibilitástörő változások

Az OpenAPI 3.1 támogatásához frissíteni kell a mögöttes OpenAPI.NET kódtárat egy új főverzióra, a 2.0-ra. Ez az új verzió néhány kompatibilitástörő változást hozott az előző verzióhoz képest. A kompatibilitástörő változások hatással lehetnek az alkalmazásokra, ha dokumentum-, művelet- vagy sématranszformátorokkal rendelkeznek.

Az egyik legfontosabb változás az, hogy a OpenApiAny osztályt a JsonNode közvetlen használata mellett elvetették. A OpenApiAny használó átalakítókat frissíteni kell a JsonNodehasználatához. Az alábbi ábra a sémaátalakító .NET 9-ről .NET 10-re történő változásait mutatja be:

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

Vegye figyelembe, hogy ezek a módosítások akkor is szükségesek, ha csak az OpenAPI-verziót 3.0-ra konfigurálja.

OpenAPI a YAML nyelvben

ASP.NET mostantól támogatja a létrehozott OpenAPI-dokumentum YAML formátumban való kiszolgálását. A YAML tömörebb lehet, mint a JSON, kiküszöbölve a kapcsos zárójeleket és idézőjeleket, amikor ezek feltételezhetők. A YAML támogatja a többsoros sztringeket is, amelyek hosszú leírásokhoz hasznosak lehetnek.

Ha egy alkalmazást úgy szeretne konfigurálni, hogy a létrehozott OpenAPI-dokumentumot YAML formátumban szolgálja ki, adja meg a végpontot a MapOpenApi hívásban egy ".yaml" vagy ".yml" utótaggal, ahogyan az a következő példában látható:

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

Támogatás a következőhöz:

  • A YAML jelenleg csak az OpenAPI-végpontról érhető el.
  • Az OpenAPI-dokumentumok létrehozása YAML formátumban a buildeléskor egy későbbi előzetes verzióban lesz hozzáadva.

Lásd ezt a számú PR-t, amely támogatta a létrehozott OpenAPI-dokumentum YAML formátumban való kiszolgálását.

Válasz leírása a ProducesResponseType-on

A ProducesAttribute, ProducesResponseTypeAttributeés ProducesDefaultResponseType attribútumok mostantól elfogadnak egy választható sztringparamétert Description, amely beállítja a válasz leírását. Íme egy példa:

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

És a létrehozott OpenAPI:

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

Közösségi hozzájárulás által 🙏

Hitelesítés és engedélyezés

Ez a szakasz a hitelesítés és az engedélyezés új funkcióit ismerteti.

Vegyes

Ez a szakasz a ASP.NET Core 10.0 különböző új funkcióit ismerteti.

Jobb támogatás az alkalmazások legfelső szintű utasításokkal való teszteléséhez

A .NET 10 mostantól jobban támogatja a legfelső szintű utasításokathasználó alkalmazások tesztelését. Korábban a fejlesztőknek manuálisan kellett hozzáadniuk a public partial class Program-t a Program.cs fájlhoz, hogy a tesztprojekt hivatkozhasson a Program class-re. public partial class Program-ra azért volt szükség, mert a C# 9 legfelső szintű utasítás funkciója létrehozott egy Program class-et, amelyet belső-ként deklaráltak.

A .NET 10-ben egy forrásgenerátort használ a public partial class Program deklaráció létrehozásához, ha a programozó nem deklarálta explicit módon. Emellett hozzáadtunk egy elemzőt, amely észleli, hogy public partial class Program mikor van explicit módon deklarálva, és azt tanácsolja a fejlesztőnek, hogy távolítsa el.

kép

A következő PR-k járultak hozzá ehhez a funkcióhoz:

Annak észlelése, hogy az URL-cím helyi-e RedirectHttpResult.IsLocalUrl

Az új RedirectHttpResult.IsLocalUrl(url) segédmetódussal állapítsa meg, hogy az URL-cím helyi-e. Az URL-cím akkor tekinthető helyinek, ha az alábbiak teljesülnek:

A virtuális útvonalakat"~/" használó URL-címek szintén helyiek.

IsLocalUrl az URL-címek ellenőrzéséhez hasznos, mielőtt átirányítja őket, hogy megakadályozza nyílt átirányítási támadásokat.

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

Köszönjük, @martincostello ezt a hozzájárulást!