.NET 幫助

Ocelot .NET(對開發人員的運作方式)

里根普恩
里根普恩
2024年6月6日
分享:

Ocelot API Gateway是一個 .NET 程式庫,實現了 API 網關模式,通常用於 API 網關中以處理多個微服務的請求。 它充當輕量級 API 閘道,將客戶端的請求路由至下游服務。 本文深入探討了 Ocelot API Gateway 如何處於客戶端和下游服務之間,涵蓋了其安裝、配置、關鍵功能以及用於展示其能力的實際範例。 我們還將探索IronPDF 概述以及Ocelot API結合。

什麼是 Ocelot .NET?

Ocelot .NET(對開發人員的運作方式):圖 1 - Ocelot .NET 首頁

Ocelot 是一個針對 .NET 應用程式設計的開源 API 閘道解決方案,用於促進跨多個微服務的請求路由。 它充當反向代理,管理來自客戶端的 HTTP 請求,並將它們路由到 ASP.NET Core 環境中的相應服務。 Ocelot 在 ASP.NET Core 上開發,可與 .NET 生態系統無縫整合,提供了一套對現代應用程式至關重要的強大功能。

Ocelot 的主要特點

路由

Ocelot 功能的核心是其路由能力。 它根據開發人員指定的配置將傳入的請求匹配到適當的服務路由,並且可以與服務發現機制集成。 這包括對萬用字元路由的支持,這在處理不同的 API 版本或大量服務端點時特別有用。

中介軟體 / 委派處理程式

Ocelot 允許開發人員注入自定義中介軟體或處理程式,以便在請求和回應到達客戶端或服務之前進行處理。這對於添加標頭、日誌記錄請求,甚至是根據需要修改回應結構非常有用。

負載平衡

Ocelot 支援多種負載平衡策略,預設包含如輪詢、最少連線,以及當預定義的策略不符合需求時使用自訂供應商。 此功能確保負載在可用服務之間均勻分配,提升應用程式的整體彈性和效率。

身份驗證和授權

保護 API 端點至關重要,而 Ocelot 提供支援與現有的身份驗證提供者(例如 Identity Server)進行整合。 它支持熱門的驗證方案,包括 JWT 和 OAuth2,並允許對用戶訪問服務進行細緻的控制。

速率限制和服務品質 (服務品質)

速率限制是防止濫用並確保公平使用服務的關鍵,因為它限制了用戶在給定時間內可以發出的請求數量。 服務品質(服務品質)選項如設定超時和重試可確保服務在不同的網絡條件和負載下保持可用性和響應性。

在 .NET 專案中設置 Ocelot

要將 Ocelot 集成到您的項目中,需要通過 NuGet 安裝 Ocelot 套件,並在 Program 類中進行配置:

Install-Package IronPdf

Ocelot .NET(對開發人員的運作方式):圖 2 - 通過 NuGet 套件管理器安裝 Ocelot .NET

在您的 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();
}

在 Ocelot 中配置路由

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 閘道的請求路由到不同的下游服務。

在 .NET 中將 IronPDF 與 Ocelot 結合使用

Ocelot .NET(開發人員的工作原理):圖3 - IronPDF首頁

結合 Ocelot 與IronPDF 的 HTML 到 PDF 轉換在 .NET 應用程式中提供了一個強大的解決方案,您可以將 PDF 生成請求路由到特定服務或在內部處理它們。 在這裡,我將引導您完成設置基本 .NET Core 應用程式的過程,該應用程式使用 Ocelot 作為 API Gateway 並使用 IronPDF 將 HTML 生成 PDF。

IronPDF 擅長於HTML轉PDF轉換,確保準確保留原始佈局和樣式。 它非常適合從基於網絡的內容(如報告、發票和文檔)創建PDF。 IronPDF 支援 HTML 檔案、URL 和原始 HTML 字串,輕鬆製作高品質的 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

第 1 步:設置 .NET Core 網頁應用程式

首先,建立一個新的.NET Core Web API 專案。 您可以使用 .NET CLI 或 Visual Studio 來完成這項工作。

使用 .NET:

dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF

步驟 2:添加必要的套件

您需要安裝 Ocelot 和 IronPDF。 您可以通过 NuGet 添加这些套件。

dotnet add package Ocelot
dotnet add package IronPdf

步驟 3:配置 Ocelot

在您的專案根目錄中新增一個 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"
    }
}

步驟 4:配置 Startup.cs

更新 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();
    }
}

步驟 5:使用 IronPDF 實現 PDF 生成

在您的 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");
        }
    }
}

步驟六:執行應用程式

確保您的應用程式正確配置以在 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 .NET(開發人員如何使用):圖4

此範例展示了在同一應用程式中結合Ocelot與IronPDF的基本實作。 在生產環境中,考慮保護您的端點、處理錯誤情境,以及根據您的具體需求優化 PDF 生成過程。

結論

Ocelot .NET(對開發者的運作方式):圖5 - IronPDF 授權頁面

總之,Ocelot 是在微服務架構中管理和路由請求的出色選擇。 其強大的功能,如路由、負載均衡、中介軟體支持和身份驗證,使其成為任何 .NET 開發人員的強大工具。 透過遵循所提供的詳細步驟,您可以有效地將 Ocelot 整合到您的 .NET 專案中,以簡化您的 API 閘道需求。

此外,如果您需要 PDF 生成功能,將 IronPDF 與 Ocelot 集成是簡單的,並能增強應用程式的功能性。 IronPDF 提供一個授權的免費試用並且授權方案的起價為滿足您 PDF 需求的成本效益解決方案。

結合使用 Ocelot 和 IronPDF,您可以構建一個全面且高效的微服務架構,滿足路由和文件生成要求。

里根普恩
軟體工程師
Regan 畢業於雷丁大學,擁有電子工程學士學位。在加入 Iron Software 之前,他的工作角色讓他專注於單一任務;而他在 Iron Software 工作中最喜歡的是他所能承擔的工作範圍,無論是增加銷售價值、技術支持、產品開發或市場營銷。他喜歡了解開發人員如何使用 Iron Software 庫,並利用這些知識不斷改進文檔和開發產品。
< 上一頁
Microsoft.Extensions.Caching.Memory 範例 (含 PDF) 在 C#
下一個 >
NHibernate C#(開發人員如何使用)