跳至页脚内容
.NET 帮助

OData C#(开发者用法)

开放数据协议 (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

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; }
}
$vbLabelText   $csharpLabel

代码描述

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);
    }
}
$vbLabelText   $csharpLabel

代码描述

提供的代码在ASP.NET Core应用程序中定义了一个名为ODataController,使可以使用OData协议查询和操作数据。 它将请求路由到Service对象列表。 通过带有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()
    );
$vbLabelText   $csharpLabel

代码描述

此代码在 .NET 6 应用中配置 OData 支持。 首先,它导入必要的命名空间并创建一个WebApplicationBuilder实例。 Service实体的实体集。 然后调用AddOData方法来配置OData服务,包括启用选择、筛选、按顺序、计数、展开,并为查询结果设置最大top值为20。 这种设置确保应用能够有效处理 OData 查询。

GetEdmModel()方法来检索用于查询的数据模型,构成OData服务的基础。此服务利用称为实体数据模型(EDM)的抽象数据模型来定义暴露的数据。 ODataConventionModelBuilder类通过默认命名约定生成EDM,最小化代码需求。 或者,开发人员可以利用ODataModelBuilder类来获得对EDM的更大控制。

代码的屏幕截图

OData C#(开发人员工作原理):图4 - Visual Studio中的代码

运行服务

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

https://localhost:7131/odata/Service

程序输出

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

IronPDF简介

IronPDF 是一个全面的 C# 库,旨在简化 .NET 应用中的文件到 PDF 的转换拆分 PDF 页从 PDF 中移除页。 它提供了一系列功能,包括从 HTML、CSS、图片和 JavaScript 生成 PDF,使开发人员能够轻松地将网页内容转换为高质量的 PDF 文档。 凭借其直观的 API 和强大的渲染引擎,IronPDF 使开发人员能够简化 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");
    }
}
$vbLabelText   $csharpLabel

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

OData C#(开发人员工作原理):图7 - PDF输出

结论

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

常见问题解答

OData 如何简化 .NET 中的 API 开发?

OData 通过提供一个标准化的协议来简化 .NET 中的 API 开发,该协议使用 CRUD 操作来查询和操作数据。它遵循使用 URL 和 HTTP 动词的 RESTful 实践,利用实体数据模型 (EDM) 以 JSON 或 AtomPub 格式表示数据。

在 .NET 应用程序中使用 OData 的主要好处是什么?

在 .NET 应用程序中使用 OData 的主要好处包括标准化、丰富的查询功能、改进的开发者体验,以及跨不同平台的互操作性,从而减少复杂性并增强高效的数据检索。

如何在 ASP.NET Core 应用程序中设置 OData 服务?

要在 ASP.NET Core 应用程序中设置 OData 服务,您需要定义一个 OData 模型并配置中间件。您可以通过安装 Microsoft.AspNetCore.OData NuGet 包并使用 ODataConventionModelBuilder 来定义您的实体数据模型。

在 OData 中启用查询属性的作用是什么?

OData 中的 EnableQuery 属性允许客户端对 OData 控制器公开的数据执行过滤、排序和分页等操作,提高了 API 的灵活性和可用性。

如何在 .NET 中从 HTML 内容生成 PDF?

您可以使用 IronPDF 库在 .NET 中从 HTML 内容生成 PDF。通过创建一个 HTML 字符串并使用 ChromePdfRenderer 类,您可以将 HTML 渲染为 PDF 文档,然后将其保存到文件中。

ODataConventionModelBuilder 在 .NET 中的作用是什么?

ODataConventionModelBuilder 在 .NET 中用于使用默认命名约定自动生成实体数据模型 (EDM),减少了在应用程序中定义 OData 模型所需的代码量。

在 .NET 中,有什么全面的 PDF 操作库?

IronPDF 是一个用于 PDF 操作的综合 C# 库,它有助于在 .NET 应用程序中执行文件到 PDF 转换、拆分和删除 PDF 页、从 HTML 生成 PDF 等任务。

OData 如何增强 .NET 服务的互操作性?

OData 通过允许遵循 OData 标准的客户端与基于 .NET 的 OData 服务无缝交互,从而促进不同应用程序和平台间的更广泛集成,增强了互操作性。

在 OData 的上下文中,CRUD 操作是什么?

在 OData 的上下文中,CRUD 操作指的是创建(Create)、读取(Read)、更新(Update) 和删除(Delete) 这些基本操作,它们是在 RESTful API 中操作数据的本质。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me