在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
Ocelot API Gateway是一個 .NET 程式庫,實現了 API 網關模式,通常用於 API 網關中以處理多個微服務的請求。 它充當輕量級 API 閘道,將客戶端的請求路由至下游服務。 本文深入探討了 Ocelot API Gateway 如何處於客戶端和下游服務之間,涵蓋了其安裝、配置、關鍵功能以及用於展示其能力的實際範例。 我們還將探索IronPDF 概述以及Ocelot API結合。
Ocelot 是一個針對 .NET 應用程式設計的開源 API 閘道解決方案,用於促進跨多個微服務的請求路由。 它充當反向代理,管理來自客戶端的 HTTP 請求,並將它們路由到 ASP.NET Core 環境中的相應服務。 Ocelot 在 ASP.NET Core 上開發,可與 .NET 生態系統無縫整合,提供了一套對現代應用程式至關重要的強大功能。
Ocelot 功能的核心是其路由能力。 它根據開發人員指定的配置將傳入的請求匹配到適當的服務路由,並且可以與服務發現機制集成。 這包括對萬用字元路由的支持,這在處理不同的 API 版本或大量服務端點時特別有用。
Ocelot 允許開發人員注入自定義中介軟體或處理程式,以便在請求和回應到達客戶端或服務之前進行處理。這對於添加標頭、日誌記錄請求,甚至是根據需要修改回應結構非常有用。
Ocelot 支援多種負載平衡策略,預設包含如輪詢、最少連線,以及當預定義的策略不符合需求時使用自訂供應商。 此功能確保負載在可用服務之間均勻分配,提升應用程式的整體彈性和效率。
保護 API 端點至關重要,而 Ocelot 提供支援與現有的身份驗證提供者(例如 Identity Server)進行整合。 它支持熱門的驗證方案,包括 JWT 和 OAuth2,並允許對用戶訪問服務進行細緻的控制。
速率限制是防止濫用並確保公平使用服務的關鍵,因為它限制了用戶在給定時間內可以發出的請求數量。 服務品質(服務品質)選項如設定超時和重試可確保服務在不同的網絡條件和負載下保持可用性和響應性。
要將 Ocelot 集成到您的項目中,需要通過 NuGet 安裝 Ocelot 套件,並在 Program 類中進行配置:
Install-Package IronPdf
在您的 Startup.cs 或 Program 類別中配置服務,包括請求建構器中介軟體,以設置服務容器:
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Optionally handle ASP.NET Core environment settings
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Start Ocelot
await app.UseOcelot();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Optionally handle ASP.NET Core environment settings
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Start Ocelot
await app.UseOcelot();
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddOcelot()
End Sub
Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Optionally handle ASP.NET Core environment settings
If env.IsDevelopment() Then
app.UseDeveloperExceptionPage()
End If
' Start Ocelot
Await app.UseOcelot()
End Sub
Ocelot 使用一個配置檔案,通常是 ocelot.json,來定義路由規則。 以下是一個展示多路由配置的更複雜範例:
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/users/{id}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "userapi.com",
"Port": 443
}
],
"UpstreamPathTemplate": "/users/{id}",
"UpstreamHttpMethod": ["Get"]
},
{
"DownstreamPathTemplate": "/api/products/{id}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "productapi.com",
"Port": 443
}
],
"UpstreamPathTemplate": "/products/{id}",
"UpstreamHttpMethod": ["Get"]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://yourgateway.com"
}
}
此配置指定如何根據路徑和 HTTP 方法使用 JSON 文件設置將對 API 閘道的請求路由到不同的下游服務。
結合 Ocelot 與IronPDF 的 HTML 到 PDF 轉換在 .NET 應用程式中提供了一個強大的解決方案,您可以將 PDF 生成請求路由到特定服務或在內部處理它們。 在這裡,我將引導您完成設置基本 .NET Core 應用程式的過程,該應用程式使用 Ocelot 作為 API Gateway 並使用 IronPDF 將 HTML 生成 PDF。
首先,建立一個新的.NET Core Web API 專案。 您可以使用 .NET CLI 或 Visual Studio 來完成這項工作。
使用 .NET:
dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
您需要安裝 Ocelot 和 IronPDF。 您可以通过 NuGet 添加这些套件。
dotnet add package Ocelot
dotnet add package IronPdf
在您的專案根目錄中新增一個 ocelot.json 檔案,並使用以下內容來配置 Ocelot 的路由。 此設置假定您希望 Ocelot 將 PDF 生成請求路由到將由同一應用程式內的 IronPDF 處理的特定路徑。
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/pdf",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/generatepdf",
"UpstreamHttpMethod": ["Post"]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000"
}
}
更新 Startup.cs 以包含 Ocelot 的中介軟體。 請確保您也配置應用程式以使用靜態檔案,因為IronPDF可能需要從本地檔案系統載入資源。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
await app.UseOcelot();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
await app.UseOcelot();
}
}
Public Class Startup
Public Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddControllers()
services.AddOcelot()
End Sub
Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
If env.IsDevelopment() Then
app.UseDeveloperExceptionPage()
End If
app.UseRouting()
app.UseAuthorization()
app.UseEndpoints(Sub(endpoints)
endpoints.MapControllers()
End Sub)
Await app.UseOcelot()
End Sub
End Class
在您的 Controllers 資料夾中建立一個新的控制器 PdfController.cs。 此控制器將處理 PDF 生成請求。
using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPDF.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost]
public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var output = pdf.BinaryData;
return File(output, "application/pdf", "generated.pdf");
}
}
}
using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPDF.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost]
public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var output = pdf.BinaryData;
return File(output, "application/pdf", "generated.pdf");
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf
Namespace OcelotWithIronPDF.Controllers
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpPost>
Public Function CreatePdfFromHtml(<FromBody> ByVal htmlContent As String) As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
Dim output = pdf.BinaryData
Return File(output, "application/pdf", "generated.pdf")
End Function
End Class
End Namespace
確保您的應用程式正確配置以在 ocelot.json 中指定的端口上監聽。 您可以在 Properties/launchSettings.json 中設置此項。
{
"profiles": {
"OcelotWithIronPDF": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
現在,運行您的應用程序,您應該可以發佈 HTML 內容至http://localhost:5000/generatepdf並收到一個PDF作為回應。
此範例展示了在同一應用程式中結合Ocelot與IronPDF的基本實作。 在生產環境中,考慮保護您的端點、處理錯誤情境,以及根據您的具體需求優化 PDF 生成過程。
總之,Ocelot 是在微服務架構中管理和路由請求的出色選擇。 其強大的功能,如路由、負載均衡、中介軟體支持和身份驗證,使其成為任何 .NET 開發人員的強大工具。 透過遵循所提供的詳細步驟,您可以有效地將 Ocelot 整合到您的 .NET 專案中,以簡化您的 API 閘道需求。
此外,如果您需要 PDF 生成功能,將 IronPDF 與 Ocelot 集成是簡單的,並能增強應用程式的功能性。 IronPDF 提供一個授權的免費試用並且授權方案的起價為滿足您 PDF 需求的成本效益解決方案。
結合使用 Ocelot 和 IronPDF,您可以構建一個全面且高效的微服務架構,滿足路由和文件生成要求。