ASP.NET Core 中 API 网关入门指南 - Telerik.com

作者:API传播员 · 2025-11-02 · 阅读时间:5分钟

API 网关是现代 Web 应用程序中不可或缺的组件,它为路由管理、安全性保障和数据聚合提供了一个集中点。通过本文,您将了解 API 网关的核心功能及其在 ASP.NET Core 中的实现方法,特别是使用 Ocelot 这一强大的开源工具。


什么是 API 网关?为什么它很重要?

API 网关是客户端与服务之间的中介组件,主要负责接收客户端请求,将其路由到内部服务,并返回响应。除了基本的路由功能,API 网关还可以实现以下功能:

  • 服务路由与抽象:集中管理请求,将客户端调用转发到相应的微服务,简化服务的内部复杂性。
  • 集中式安全:统一配置身份验证和授权策略,减少代码重复,支持 JWT 或 OAuth2 等安全机制。
  • 性能优化:通过聚合多个微服务调用,减少客户端的往返请求次数,提升性能。
  • 负载均衡与故障转移:在微服务实例之间分配请求,监控服务可用性,并在故障时重定向请求。
  • 数据处理:支持请求和响应格式的转换,例如将 REST 请求转换为 GraphQL 调用。
  • 流量控制:限制客户端请求数量,防止微服务因过载而崩溃。
  • 集中监控:提供性能指标和日志的集中收集,便于监控和审计。

在微服务架构中,API 网关尤为重要,因为它能够统一管理多个服务的规则和功能,简化开发和维护工作。


使用 Ocelot 实现 API 网关

在 ASP.NET Core 中,Ocelot 是实现 API 网关的常用工具。它是一个 NuGet 包,提供了路由、身份验证、速率限制、请求聚合等功能。接下来,我们将通过一个示例展示如何使用 Ocelot 创建 API 网关。

创建示例 API

  1. 创建解决方案:

    dotnet new sln -n PublishCMS
  2. 创建 API 项目并添加到解决方案:

    dotnet new webapi -n Content.Api
    dotnet sln add Content.Api/Content.Api.csproj
  3. 修改 Properties/launchSettings.json 文件,将 API 端口设置为 5001

此时,您已经创建了一个简单的 API,它可以返回一些示例内容数据。

创建 Ocelot 项目

  1. 创建 API 网关项目并添加到解决方案:

    dotnet new webapi -n Content.ApiGateway
    dotnet sln add Content.ApiGateway/Content.ApiGateway.csproj
  2. 添加 Ocelot NuGet 包:

    cd Content.ApiGateway
    dotnet add package Ocelot
  3. 在项目中创建 ocelot.json 文件,定义 API 路由规则。例如:

    {
     "Routes": [
       {
         "DownstreamPathTemplate": "/api/content",
         "DownstreamScheme": "http",
         "DownstreamHostAndPorts": [
           { "Host": "localhost", "Port": 5001 }
         ],
         "UpstreamPathTemplate": "/cms/content",
         "UpstreamHttpMethod": [ "GET" ]
       }
     ],
     "GlobalConfiguration": {
       "BaseUrl": "http://localhost:5000"
     }
    }
  4. Program.cs 文件中,添加以下代码以启动 Ocelot:

    builder.Services.AddOcelot();
    app.UseOcelot().Wait();

测试 API 网关

配置完成后,您可以通过 Visual Studio 配置两个项目同时运行。启动应用程序后,访问以下地址测试 API 网关是否正常工作:

http://localhost:5000/cms/content

此时,API 网关将请求转发到内部服务 /api/content,并返回响应。


添加高级功能

限制请求数量

通过 Ocelot 的速率限制功能,可以防止单个客户端过度调用服务。在 ocelot.json 文件中,添加以下配置:

{
  "EnableRateLimiting": true,
  "Period": "2m",
  "Limit": 2,
  "HttpStatusCode": 429,
  "QuotaExceededMessage": "Too many requests"
}

当客户端在两分钟内超过两次请求时,将返回 HTTP 状态码 429 - Too Many Requests

添加内存缓存

Ocelot 支持通过 CacheManager 实现内存缓存。在 API 网关项目中,安装 CacheManager NuGet 包:

dotnet add package Ocelot.Cache.CacheManager

然后在 ocelot.json 文件中添加缓存配置:

{
  "FileCacheOptions": {
    "TtlSeconds": 300
  }
}

通过缓存配置,可以显著减少重复请求对服务的负载。


结论

API 网关是中大型应用程序的重要组成部分,尤其是在微服务架构中。它能够统一管理身份验证、数据转换、流量控制等功能,简化开发和维护工作。

本文通过 Ocelot 展示了如何在 ASP.NET Core 中实现 API 网关,并介绍了速率限制和内存缓存等高级功能。如果您对 API 网关感兴趣,不妨尝试复现本文中的示例,并探索更多 Ocelot 的功能。

原文链接: https://www.telerik.com/blogs/getting-started-api-gateways-aspnet-core