.NET 帮助

OData C#(对开发人员如何工作)

Chipego
奇佩戈-卡琳达
2024年八月13日
分享:

开放数据协议(OData)简化了在Microsoft .NET开发中构建和使用RESTful API。 它通过熟悉的CRUD(创建、读取、更新、删除)操作提供了一种标准化的方法来查询和操作数据。 本文将探讨开放数据协议如何简化 .NET 中的 API 开发,提供示例并强调其主要优势。 要了解更多关于 OData 的信息,您可以查看 OData C# GitHub Repository 上的源代码。

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) 功能,允许客户端高效地检索特定数据集。
  • 改进的开发者体验:用于OData的.NET库简化了API开发。 开发人员可以利用预置组件进行路由选择、查询处理和数据序列化,从而减少代码重复和开发时间。
  • 互操作性: 各种平台的 OData 兼容客户端可以与您的基于 .NET 的 OData 服务无缝交互,促进更广泛的应用集成。

开始使用.NET Framework 中的 OData

用于 OData 的 .NET 库通过促进操作数据集的有效方法来增强开发人员的体验。 它简化了在 .NET 开发中构建和使用 RESTful API 的过程。 它通过熟悉的CRUD操作(创建、读取、更新、删除)提供了一种标准化的数据查询和操作方法。

在 .NET 项目中设置OData

首先在 Visual Studio 中打开新项目。 然后,导航到 "解决方案资源管理器",右键单击您的项目,并选择 "管理 NuGet 包"。 搜索 Microsoft.AspNetCore.OData 并安装。 当前的 OData 版本为 8.2.5。

要在 NuGet 软件包管理器控制台中安装 OData,请使用以下命令。

Install-Package Microsoft.AspNetCore.OData
Install-Package Microsoft.AspNetCore.OData
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

OData C#(它如何为开发人员工作):图3 - 安装 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; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码描述

ODataModelBuilder 类在 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码描述

所提供的代码在 ASP.NET Core 应用程序中定义了一个名为 ServiceController 的 ODataController,可以使用 OData 协议查询和操作数据。 它将请求路由到 "odata/Service",并提供服务对象的静态列表,包括一台笔记本电脑和一部智能手机。 带有 [EnableQuery] 装饰的 Get 方法允许客户端对产品列表执行 OData 查询(过滤、排序、分页),并以 IActionResult 的形式返回 HTTP GET 请求的结果。

在 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()
    );
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码描述

该代码用于在 .NET 6 应用程序中配置 OData 支持。 首先,它导入必要的命名空间并创建一个 WebApplicationBuilder 实例。 GetEdmModel 方法使用 ODataConventionModelBuilder 定义 OData 模型,ODataConventionModelBuilder 指定了服务实体的实体集。 然后调用 AddOData 方法来配置 OData 服务,包括启用选择、过滤、排序、计数、展开,以及设置查询结果的最大顶值为 20。 这种设置可确保应用程序能够有效处理 OData 查询。

AddOData() 方法使用 GetEdmModel() 方法,该方法检索用于查询的数据模型,构成 OData 服务的基础。此服务使用称为实体数据模型 (EDM) 的抽象数据模型来定义公开的数据。 ODataConventionModelBuilder 类通过默认命名约定生成 EDM,从而最大限度地减少代码需求。 此外,开发人员还可以利用 ODataModelBuilder 类来更好地控制 EDM。

代码截图

OData C#(开发者如何使用):图4 - Visual Studio中的代码

运行服务

运行服务后,您可以使用各种 OData 查询选项对服务进行查询,如

https://localhost:7131/odata/Service
https://localhost:7131/odata/Service
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

项目成果

OData C#(开发人员的工作原理):图 5 - OData 服务输出

IronPDF 简介

IronPDF 是一个全面的 C# 库,旨在简化 .NET 应用程序中的文件到 PDF 的转换PDF 页面的拆分以及从 PDF 中移除页面。 它提供了广泛的功能,包括从 HTML、CSS、图像和 JavaScript 生成 PDF 的能力,使开发人员能够毫不费力地将网页内容转化为高质量的 PDF 文档。 IronPDF 凭借其直观的 API 和强大的渲染引擎,使开发人员能够简化 PDF 生成流程,轻松地将动态文档生成功能集成到他们的应用程序中。

OData C#(它如何为开发者工作):图 6 - IronPDF

将 IronPDF 添加到项目中

要在 Visual Studio 中安装 IronPdf,请导航到 NuGet Package Manager Console,然后使用以下命令。

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

生成 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此示例创建一个简单的员工记录,然后使用IronPDF生成一个显示该人姓名的PDF文档。 它展示了 C# 记录如何与 .NET 应用程序中的 PDF 生成无缝集成。

OData C#(它如何为开发人员工作):图 7 - PDF 输出

结论

OData 通过提供标准化的查询和操作功能,简化了 .NET 中 RESTful API 的开发和使用。 我们还可以将其与 Entity Framework 集成,通过简化数据访问和管理提高开发效率。 OData 简化了应用程序接口(API)的开发,其丰富的查询功能和更好的开发人员体验实现了跨平台的无缝集成和互操作性。 此外,IronPDF 还为 .NET 应用程序中强大的 PDF 操作提供了全面的功能和支持。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
StyleCop C#(它如何为开发人员工作)
下一步 >
IdentityServer .NET(开发人员如何工作)