Bagikan melalui


Apa yang baru dalam ASP.NET Core 10.0

Artikel ini menyoroti perubahan paling signifikan dalam ASP.NET Core 10.0 dengan tautan ke dokumentasi yang relevan.

Artikel ini akan diperbarui setiap kali rilis pratinjau baru tersedia. Lihat halaman pengumuman Asp.Net Core hingga halaman ini diperbarui.

Blazor

Bagian ini menjelaskan fitur baru untuk Blazor.

parameter QuickGridRowClass

Aplikasikan kelas stylesheet ke baris grid berdasarkan item baris menggunakan parameter RowClass yang baru. Dalam contoh berikut, metode GetRowCssClass dipanggil pada setiap baris untuk menerapkan kelas lembar gaya secara kondisional berdasarkan item baris:

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

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

Untuk informasi selengkapnya, lihat komponen ASP.NET Core Blazor 'QuickGrid'.

Skrip Blazor sebagai aset web statis

Dalam rilis .NET sebelumnya, skrip Blazor disajikan dari sumber daya yang disematkan dalam kerangka kerja bersama ASP.NET Core. Di .NET 10 atau yang lebih baru, skrip Blazor disajikan sebagai aset web statis dengan kompresi dan sidik jari otomatis.

Untuk informasi selengkapnya, lihat sumber daya berikut ini:

Sorotan pola rute

Atribut [Route] sekarang mendukung penyorotan sintaks rute untuk membantu memvisualisasikan struktur templat rute:

Pola atribut rute untuk nilai penghitung menunjukkan penyorotan sintaksis

SignalR

Bagian ini menjelaskan fitur baru untuk SignalR.

Antarmuka Pemrograman Aplikasi Minimalis

Bagian ini menjelaskan fitur baru untuk API minimal.

OpenAPI

Bagian ini menjelaskan fitur baru untuk OpenAPI.

Dukungan OpenAPI 3.1

ASP.NET Core telah menambahkan dukungan untuk menghasilkan dokumen OpenAPI versi 3.1 di .NET 10. Terlepas dari peningkatan versi minor, OpenAPI 3.1 merupakan pembaruan signifikan untuk spesifikasi OpenAPI, khususnya dengan dukungan penuh untuk draf Skema JSON 2020-12.

Beberapa perubahan yang akan Anda lihat dalam dokumen OpenAPI yang dihasilkan meliputi:

  • Jenis nullable tidak lagi memiliki properti nullable: true dalam skema.
  • Alih-alih properti nullable: true, mereka memiliki kata kunci type yang nilainya adalah array yang menyertakan null sebagai salah satu jenisnya.

Dengan fitur ini, versi OpenAPI default untuk dokumen yang dihasilkan3.1. Versi dapat diubah dengan mengatur secara eksplisit properti OpenApiVersion dari OpenApiOptions dalam parameter delegasi configureOptions dari AddOpenApi.

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

Saat membuat dokumen OpenAPI pada waktu build, versi OpenAPI dapat dipilih dengan mengatur --openapi-version dalam item MSBuild OpenApiGenerateDocumentsOptions.

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

Dukungan OpenAPI 3.1 utama ditambahkan dalam PR berikut.

Perubahan besar OpenAPI 3.1

Dukungan untuk OpenAPI 3.1 memerlukan pembaruan ke pustaka OpenAPI.NET yang mendasar ke versi utama baru, 2.0. Versi baru ini memiliki beberapa perubahan signifikan dari versi sebelumnya. Perubahan yang merusak dapat memengaruhi aplikasi yang memiliki transformator dokumen, operasi, atau skema.

Salah satu perubahan paling signifikan adalah bahwa kelas OpenApiAny telah dihilangkan demi menggunakan JsonNode secara langsung. Transformator yang menggunakan OpenApiAny perlu diperbarui untuk menggunakan JsonNode. Perbedaan berikut menunjukkan perubahan transformator skema dari .NET 9 ke .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;
});

Perhatikan bahwa perubahan ini diperlukan bahkan ketika hanya mengonfigurasi versi OpenAPI ke 3.0.

OpenAPI di Yaml

ASP.NET sekarang mendukung penyajian dokumen OpenAPI yang dihasilkan dalam format YAML. YAML bisa lebih ringkas daripada JSON dengan menghilangkan kurung kurawal dan tanda kutip ketika bisa disimpulkan. YAML juga mendukung string multibaris, yang dapat berguna untuk deskripsi panjang.

Untuk mengonfigurasi aplikasi untuk melayani dokumen OpenAPI yang dihasilkan dalam format YAML, tentukan titik akhir dalam panggilan MapOpenApi dengan akhiran ".yaml" atau ".yml", seperti yang ditunjukkan dalam contoh berikut:

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

Dukungan untuk:

  • YAML saat ini hanya tersedia untuk OpenAPI yang diakses melalui endpoint OpenAPI.
  • Membuat dokumen OpenAPI dalam format YAML pada waktu build akan ditambahkan dalam pratinjau mendatang.

Lihat PR ini yang menambahkan dukungan untuk menyajikan dokumen OpenAPI yang dihasilkan dalam format YAML.

Deskripsi respons pada ProducesResponseType

ProducesAttribute, ProducesResponseTypeAttribute, dan ProducesDefaultResponseType atribut sekarang menerima parameter string opsional, Description, yang akan mengatur deskripsi respons. Berikut adalah contohnya:

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

Dan OpenAPI yang telah dihasilkan:

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

kontribusi Komunitas oleh Sander ten Brinke🙏

Autentikasi dan otorisasi

Bagian ini menjelaskan fitur baru untuk autentikasi dan otorisasi.

Lain-lain

Bagian ini menjelaskan berbagai fitur baru di ASP.NET Core 10.0.

Dukungan yang lebih baik untuk menguji aplikasi dengan pernyataan tingkat atas

.NET 10 sekarang memiliki dukungan yang lebih baik untuk menguji aplikasi yang menggunakan pernyataan tingkat atas . Sebelumnya pengembang harus menambahkan public partial class Program secara manual ke file Program.cs sehingga proyek pengujian dapat mereferensikan Program class. public partial class Program diperlukan karena fitur pernyataan tingkat atas di C# 9 menghasilkan Program class yang dideklarasikan sebagai internal.

Dalam .NET 10, generator sumber digunakan untuk menghasilkan deklarasi public partial class Program jika programmer tidak menyatakannya secara eksplisit. Selain itu, penganalisis ditambahkan untuk mendeteksi kapan public partial class Program dinyatakan secara eksplisit dan menyarankan pengembang untuk menghapusnya.

Gambar

PR berikut berkontribusi pada fitur ini:

Mendeteksi apakah URL bersifat lokal menggunakan RedirectHttpResult.IsLocalUrl

Gunakan metode pembantu RedirectHttpResult.IsLocalUrl(url) baru untuk mendeteksi apakah URL bersifat lokal. URL dianggap lokal jika berikut ini benar:

  • Ini tidak memiliki host atau bagian otoritas .
  • Jalur absolutnya adalah .

URL yang menggunakan jalur virtual "~/" juga lokal.

IsLocalUrl berguna untuk memvalidasi URL sebelum mengalihkannya untuk mencegah serangan pengalihan terbuka .

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

Terima kasih @martincostello atas kontribusi ini!