C# OData(開發者如何理解其工作原理)
開放資料協定 ( OData ) 簡化了在 Microsoft .NET 開發中建置和使用 RESTful API 的過程。 它提供了一種標準化的方法,透過熟悉的 CRUD(建立、讀取、更新、刪除)操作來查詢和操作資料。 本文探討了開放資料協定如何簡化 .NET 中的 API 開發,並提供了一個範例,重點介紹了其主要優勢。 要了解更多關於 OData 的信息,您可以查看OData C# GitHub 儲存庫以取得原始程式碼。
OData C#(開發者如何理解):圖 1 - OData C# - 資料存取協議
OData 遵循建立 RESTful Web API 的標準做法,使用 URL 和 HTTP 動詞(如 GET 和 POST)來定義操作。 它使用實體資料模型 (EDM) 表示數據,並使用 JSON 或 AtomPub 進行訊息編碼。 雖然與 GraphQL 相比,OData 簡化了 API 開發,但它提供的高級功能可能較少。
! OData C#(開發者如何操作):圖 2 - OData
在 .NET 中使用 OData 的好處
*標準化:* OData 強制採用一致的方式來定義實體資料模型、處理請求和格式化回應。 這降低了開發複雜性,簡化了客戶端應用程式整合。 豐富的查詢功能: OData 支援統一的資料查詢方式,可執行 CRUD 操作、篩選($filter)、排序(升序/降序)($orderby)和分頁($top,$skip)功能,使用戶端能夠有效率地擷取特定資料集。 提升開發者體驗: .NET OData 函式庫簡化了 API 開發。 開發人員可以利用預先建置的元件進行路由、查詢處理和資料序列化,從而減少程式碼重複和開發時間。 互通性:**來自各種平台的符合 OData 標準的用戶端可以與您的基於 .NET 的 OData 服務無縫交互,從而促進更廣泛的應用程式整合。
.NET Framework中的 OData入門
.NET OData 函式庫透過提供高效率的方式來操作資料集,進而提升開發人員的體驗。 它簡化了在 .NET 開發中建置和使用 RESTful API 的過程。 它提供了一種標準化的方法,透過熟悉的 CRUD 操作(建立、讀取、更新、刪除)來查詢和操作資料。
在 .NET 專案中設定OData
首先在 Visual Studio 中開啟你的新專案。 然後,導覽至解決方案資源管理器,右鍵單擊您的項目,然後選擇"管理 NuGet 套件"。 搜尋並安裝 Microsoft.AspNetCore.OData。 目前 OData 版本為 8.2.5。
若要在 NuGet 套件管理員控制台中安裝 OData,請使用下列命令。
Install-Package Microsoft.AspNetCore.OData
範例:在 ASP.NET Core 中建立 OData 服務
讓我們在 ASP.NET Core 應用程式中建立一個簡單的 OData 模型類別。 在以下程式碼中,下面的類別將公開一個可以使用 OData 語法查詢的服務清單。
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}代碼描述
Service類別是 C# 中用於管理服務的基本資料結構。它包含三個屬性: Id :服務的整數識別碼; FirstName :表示與服務關聯的名字的字串; Price:表示服務價格的十進位值。此類別可用作建置區塊,用於在 .NET 開發中建立更複雜的服務相關功能。 我們也可以根據具體情況使用集合或導航屬性。
以下是如何在 Visual Studio 的 ASP.NET Core 應用程式中設定 OData 控制器,以透過標準化的 OData 終端點公開服務清單的方法。 以下範例示範了使用靜態服務清單並在 Web API 中啟用 OData 查詢功能的基本實作:
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}代碼描述
提供的程式碼在 ASP.NET Core 應用程式中定義了一個名為ServiceController ODataController ,因此可以使用 OData 協定查詢和操作資料。 它將請求路由到odata/Service ,並提供Service物件的靜態列表,其中包括筆記型電腦和智慧型手機。 使用[EnableQuery]裝飾的Get方法允許客戶端對 Products 清單執行 OData 查詢(篩選、排序、分頁),並將結果作為 HTTP GET 請求的IActionResult傳回。
在 Program.cs 中註冊 OData 服務
要將 OData 整合到 .NET 6 應用程式中,我們需要安裝和設定必要的 OData 套件。 這包括定義 OData 模型、設定 OData 中間件以及配置服務以支援 OData 功能,例如篩選、排序和擴充。
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);代碼描述
此程式碼在 .NET 6 應用程式中配置 OData 支援。 首先,它會匯入必要的命名空間並建立一個WebApplicationBuilder實例。 GetEdmModel方法使用ODataConventionModelBuilder定義 OData 模型,該模型為Service實體指定實體集。 然後呼叫AddOData方法來配置 OData 服務,包括啟用 select、filter、order by、count、expand 等功能,並將查詢結果的最大值設為 20。 此設定可確保應用程式能夠有效地處理 OData 查詢。
AddOData()方法呼叫GetEdmModel()方法,用於擷取查詢所使用的資料模型,從而建立 OData 服務的基礎。該服務使用稱為實體資料模型 (EDM) 的抽象資料模型來定義公開的資料。 ODataConventionModelBuilder類別透過預設命名約定產生 EDM,從而最大限度地減少程式碼需求。 或者,開發人員可以使用ODataModelBuilder類別來更好地控制 EDM。
程式碼截圖
運行服務
服務運行後,您可以使用各種 OData 查詢選項查詢該服務,例如:
https://localhost:7131/odata/Service程式輸出
IronPDF簡介
IronPDF 是一個全面的 C# 庫,旨在簡化 .NET 應用程式中文件到 PDF 的轉換、 PDF 頁面的分割以及從 PDF 中刪除頁面的操作。 它提供了廣泛的功能,包括從 HTML、CSS、圖像和 JavaScript 生成 PDF 的功能,使開發人員能夠輕鬆地將 Web 內容轉換為高品質的 PDF 文件。 IronPDF 憑藉其直覺的 API 和強大的渲染引擎,使開發人員能夠簡化 PDF 生成流程,輕鬆地將動態文件生成功能整合到他們的應用程式中。
! OData C#(開發者如何操作):圖 6 - IronPDF
將 IronPDF 加入項目中
若要在 Visual Studio 中安裝 IronPDF,請導覽至 NuGet 套件管理器控制台,並使用下列命令。
Install-Package IronPdf
生成PDF
要在 .NET 應用程式中從 HTML 內容產生 PDF 文檔,我們可以使用 DinkToPdf 或類似庫中的ChromePdfRenderer類別。 本範例示範如何建立包含員工記錄詳細資訊的 PDF 檔案。
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}本範例建立一個簡單的員工記錄,然後使用 IronPDF 產生一個顯示該員工姓名的 PDF 文件。 它展示了 C# 記錄如何與 .NET 應用程式中的 PDF 生成無縫整合。
結論
OData 透過提供標準化的查詢和操作功能,簡化了 .NET 中 RESTful API 的開發和使用。 我們還可以將其與 Entity Framework 集成,透過簡化資料存取和管理來提高開發效率。 OData 簡化了 API 開發,憑藉其豐富的查詢功能和改進的開發者體驗,實現了跨各種平台的無縫整合和互通性。 此外,IronPDF 還提供全面的功能和支持,可在 .NET 應用程式中實現強大的 PDF 操作。
常見問題解答
OData 如何簡化 .NET 中的 API 開發?
OData 透過提供標準化的協議,簡化了 .NET 中的 API 開發,該協議支援使用 CRUD 操作查詢和操作資料。它遵循 RESTful 實踐,使用 URL 和 HTTP 動詞,並利用實體資料模型 (EDM) 以 JSON 或 AtomPub 格式表示資料。
在.NET應用程式中使用OData的主要優勢是什麼?
在 .NET 應用程式中使用 OData 的主要優勢包括標準化、豐富的查詢功能、改進的開發人員體驗以及跨不同平台的互通性,這降低了複雜性並提高了資料檢索的效率。
如何在 ASP.NET Core 應用程式中設定 OData 服務?
要在 ASP.NET Core 應用程式中設定 OData 服務,您需要定義 OData 模型並配置中間件。您可以透過安裝 Microsoft.AspNetCore.OData NuGet 套件並使用 ODataConventionModelBuilder 定義實體資料模型來實現這一點。
OData 中 EnableQuery 屬性的作用是什麼?
OData 中的 EnableQuery 屬性允許用戶端對 OData 控制器公開的資料執行篩選、排序和分頁等操作,從而增強 API 的靈活性和可用性。
如何在.NET中從HTML內容產生PDF?
在 .NET 中,您可以使用 IronPDF 庫從 HTML 內容產生 PDF。透過建立 HTML 字串並使用ChromePdfRenderer類,您可以將 HTML 渲染為 PDF 文檔,然後將其儲存到文件中。
.NET 中的 ODataConventionModelBuilder 的用途是什麼?
.NET 中的 ODataConventionModelBuilder 用於使用預設命名約定自動產生實體資料模型 (EDM),從而減少在應用程式中定義 OData 模型所需的程式碼量。
.NET 中用於 PDF 操作的綜合庫有哪些?
IronPDF 是一個全面的 C# PDF 操作庫,它簡化了諸如將文件轉換為 PDF、分割和刪除 PDF 頁面以及在 .NET 應用程式中從 HTML 生成 PDF 等任務。
OData 如何增強 .NET 服務的互通性?
OData 透過允許遵循 OData 標準的用戶端與基於 .NET 的 OData 服務無縫互動來增強互通性,從而促進不同應用程式和平台之間的更廣泛整合。
在 OData 的上下文中,CRUD 操作是什麼?
在 OData 的上下文中,CRUD 操作指的是建立、讀取、更新和刪除這四個基本操作,這些操作對於在 RESTful API 中操作資料至關重要。







