跳至頁尾內容
.NET幫助

Ocelot .NET(對於開發者的運行原理)

Ocelot API Gateway 是一個 .NET 程式庫,用來實現 API 閘道器模式,常用於 API 閘道器中處理多個微服務的請求。 它作為輕量級 API 閘道器,將客戶端的請求路由到下游服務。 本文深入介紹了 Ocelot API 閘道器如何位於客戶端和下游服務之間,涵蓋其安裝、配置、關鍵特性及實用範例,以展示其能力。 我們還將探索 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 類中進行配置:

dotnet add package Ocelot

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

在您的 Startup.csProgram.cs 類中配置服務,包括請求生成中介軟體,以設置服務容器:

public void ConfigureServices(IServiceCollection services)
{
    // Add Ocelot services to the service collection
    services.AddOcelot();
}

public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Use the developer exception page when in development mode
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // Start Ocelot middleware
    await app.UseOcelot();
}
public void ConfigureServices(IServiceCollection services)
{
    // Add Ocelot services to the service collection
    services.AddOcelot();
}

public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Use the developer exception page when in development mode
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // Start Ocelot middleware
    await app.UseOcelot();
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Add Ocelot services to the service collection
	services.AddOcelot()
End Sub

Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Use the developer exception page when in development mode
	If env.IsDevelopment() Then
		app.UseDeveloperExceptionPage()
	End If

	' Start Ocelot middleware
	Await app.UseOcelot()
End Sub
$vbLabelText   $csharpLabel

在 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 方法將 API 閘道器的請求路由到不同的下游服務,使用 JSON 文件進行設置。

在 Ocelot .NET 中使用 IronPDF

Ocelot .NET(對開發者的運作方式): 圖3 - IronPDF 首頁

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

IronPDF在HTML到PDF的轉換中表現出色,確保精確保留原始佈局和樣式。 它非常適合從基於網路的內容(如報告、發票和文件)建立PDF文件。 用於HTML文件、URL和原始HTML字串的支持,IronPDF可以輕鬆生成高品質的PDF文件。

using IronPdf;

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

        // 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");

        // 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");

        // 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();

        // 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");

        // 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");

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

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

		' Convert HTML file to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

步驟 1:設置 .NET Core Web 應用程式

首先,建立一個新的 .NET Core Web API 專案。 您可以使用 .NET CLI 或 Visual Studio 來執行此操作。 using .NET CLI:

dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
SHELL

步驟 2:新增所需套件

您需要安裝 Ocelot 和 IronPDF。 您可以透過 NuGet 新增這些套件。

dotnet add package Ocelot
dotnet add package IronPdf
dotnet add package Ocelot
dotnet add package IronPdf
SHELL

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

步驟 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 the PDF as a file result
            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 the PDF as a file result
            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> htmlContent As String) As IActionResult
            Dim renderer = New ChromePdfRenderer()
            Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
            Dim output = pdf.BinaryData

            ' Return the PDF as a file result
            Return File(output, "application/pdf", "generated.pdf")
        End Function

    End Class

End Namespace
$vbLabelText   $csharpLabel

步驟 6:運行應用程式

確保您的應用程式正確配置為監聽 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,您可以建立一個全面且高效的微服務架構,滿足路由和文件生成的需求。

常見問題

Ocelot 如何改善 .NET 應用程式中的微服務通訊?

Ocelot 作為 API 閘道,在 .NET 應用程式中促進跨多個微服務的高效路由和 HTTP 請求管理。它提供如路由、負載平衡和身份驗證的功能,以簡化服務之間的通信。

using Ocelot 與 IronPDF 的好處是什麼?

將 Ocelot 與 IronPDF 整合允許開發人員在 .NET 應用程式中高效路由 PDF 生成請求。IronPDF 確保 HTML 到 PDF 的轉換保留原始佈局和樣式,使其成為生成報告和發票等基於 Web 的內容的理想選擇。

如何配置 Ocelot 進行負載平衡?

Ocelot 支援各種負載平衡策略,包括迴圈法和最小連接法,可以通過通常名為 ocelot.json 的 JSON 文件配置。這確保了跨微服務的流量均勻分佈。

中介軟體在 Ocelot 的架構中扮演什麼角色?

Ocelot 中的中介軟體允許開發人員插入自定義處理程式來處理請求和回應。這對於新增標頭、記錄或修改回應等任務很有用,提高了 API 閘道的靈活性和功能性。

如何在 .NET 專案中設置 Ocelot?

要在 .NET 專案中設置 Ocelot,請通過 NuGet 安裝 Ocelot 套件,然後通過在程式類中新增 Ocelot 服務並在配置文件中定義路由進行配置。此設置有助於 API 請求的路由和管理。

Ocelot 使用什麼策略來處理路由?

Ocelot 使用配置驅動的路由,指定在 ocelot.json 文件中,將 API 閘道的請求定向到合適的下游服務。它支援萬用字元路由和服務發現機制,以設置靈活的路由。

Ocelot 如何確保 API 的安全存取?

Ocelot 與身份驗證提供者(如 Identity Server)整合,並支援 JWT 和 OAuth2 協議,允許通過控制使用者權限和確保端點保護來安全存取 API。

Ocelot 可以用來優化 PDF 生成工作流程嗎?

是的,Ocelot 可以將請求路由到專門用於 PDF 生成的服務,例如使用 IronPDF 的服務。此設置透過高效處理請求和在轉換期間保持文件保真度來優化 PDF 工作流程。

Ocelot 如何與服務發現機制整合?

Ocelot 支援與 Consul 和 Eureka 等服務發現機制的整合,允許其根據當前服務狀態動態路由請求。此整合簡化了微服務架構中服務的管理。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話