ASP.NET Core OData 9的釋出,放棄 .NET Framework

张善友發表於2024-10-09

Microsoft 於 2024 年 8 月 30 日[1]宣佈推出 ASP.NET Core OData 9 包。 這個新包將ASP.NET Core與.NET 8 OData庫保持一致,改變了OData格式中資料編碼的內部細節,使其更符合OData 規範[2]。

在2024年8月早些時候,Microsoft 將 OData .NET 庫更新到版本 8.0.0[1]。其中最重要的更改是放棄了對舊版 .NET Framework 的支援。從此版本開始,將僅支援 .NET 8 及更高版本。使用舊版 .NET Framework 的開發人員仍然可以使用 OData 庫的 7.x 版,這些庫在 2025 年 3 月之前仍受到積極支援[3],屆時他們將處於維護模式。

OData 8庫使用了新的JSON寫入器System.Text.Utf8JsonWriter[4]來序列化和反序列化JSON負載,這個新寫入器比舊的JsonWriter更快且需要更少的記憶體。並且需要的記憶體更少,由 Microsoft.OData.Json.DefaultJsonWriterFactory[5] 建立,因為它不是基於JsonWriter 而是基於TextWriter .雖然新編寫器自 OData 版本 7.12.2 以來一直可用,但現在它是 OData 8 中的預設實現。

如果需要,開發人員仍然可以使用舊編寫器,方法是在服務生成器中呼叫 AddOData 方法並提供一個例項,該例項對應於舊編寫器,為清楚起見,已重新命名。

builder.Services.AddControllers().AddOData(options => options.EnableQueryFeatures().AddRouteComponents(routePrefix: string.Empty, model: modelBuilder.GetEdmModel(), configureServices: (services) => { services.AddScoped < Microsoft.OData.Json.IJsonWriterFactory > (sp => new Microsoft.OData.Json.ODataJsonWriterFactory()); }));

新編寫器的序列化方式與舊編寫器不同。它不會像較舊的編寫器那樣對所有高 ASCII Unicode 字元進行編碼。例如,它不會將非拉丁符號(如希臘字母)編碼為 Unicode 數字序列。相反,它將輸出 Unicode 字元本身。舊編寫器會將幾乎所有非 ASCII 字元編碼為數字,從而使有效負載的大小更大,編碼過程更慢。新的 JSON 編寫器輸出大寫 Unicode 字元,而不是以前版本使用的小寫。


ASP.NET Core OData 9的另一個重大變化是依賴注入的工作方式,更新後的庫使用與.NET相同的抽象,即IServiceProvider

builder.Services.AddControllers().AddOData(options => options.EnableQueryFeatures().AddRouteComponents(routePrefix: string.Empty, model: modelBuilder.GetEdmModel(), configureServices: (services) => { services.AddDefaultODataServices(odataVersion: Microsoft.OData.ODataVersion.V4, configureReaderAction: (messageReaderSettings) => { // Relevant changes to the ODataMessageReaderSettings instance here }, configureWriterAction: (messageWriterSettings) => { // Relevant changes to the ODataMessageWriterSettings instance here }, configureUriParserAction: (uriParserSettings) => { // // Relevant changes to the ODataUriParserSettings instance here }); }));

此外,新庫還移除了舊的實現和標準,如JSONP格式。新的 ASP.NET Core OData 9 庫作為 NuGet 包[6]分發。OData 透過各種 NuGet 包提供,包括:

  • Microsoft.OData.Core 8.0.1
  • Microsoft.OData.Edm 8.0.1
  • Microsoft.OData.Client 8.0.1
  • Microsoft.Spatial 8.0.1

新版本在過去9 周內 已被下載了 250.000 次。ASP.NET Core OData 的原始碼在 GitHub 上提供[7],儲存庫目前有 458 個未解決的問題,有關完整列表,開發人員可以檢視 OData 8 .NET 庫的發行說明[8]。

相關連結

  • [1]Announcing ASP.NET Core OData 9 Official Release:https://devblogs.microsoft.com/odata/announcing-asp-net-core-odata-9-official-release/
  • [2]OData 規範:https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=e7cac2a9-2d18-4640-b94d-018dc7d3f0e2
  • [3]在 2025 年 3 月之前仍受到積極支援: https://learn.microsoft.com/en-us/odata/support/support-policy
  • [4]System.Text.Utf8JsonWriter: https://learn.microsoft.com/en-us/dotnet/api/system.text.json.utf8jsonwriter?view=net-8.0
  • [5]Microsoft.OData.Json.DefaultJsonWriterFactory:https://learn.microsoft.com/en-us/dotnet/api/microsoft.odata.json.defaultjsonwriterfactory?view=odata-core-7.0
  • [6]ASP.NET Core OData 9 nuget: https://www.nuget.org/packages/Microsoft.AspNetCore.OData/9.0.0
  • [7]GitHub 上提供:https://github.com/OData/AspNetCoreOData
  • [8]Announcing OData .NET 8 Official Release:https://devblogs.microsoft.com/odata/announcing-odata-net-8-official-release/

相關文章