在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
GraphQL作為構建靈活且高效的網絡服務的替代方案,已獲得了顯著普及。 GraphQL 可用於多種不同的語言,如 Java、Python、ASP .NET core。 但是在這篇文章中,我們將深入探討在 C# 中使用 GraphQL,並通過實際示例探討其概念、實現和使用。 此外,我們將使用IronPDF使用 GraphQL 架構定義查詢類別來創建 PDF 文件的 C#。
GraphQL 是一種 API 的查詢語言,允許客戶端精確地請求所需的數據。 與 RESTful API 不同的是,GraphQL 服務允許用戶端指定他們所需的數據結構形狀,而多個端點可能會返回固定的數據結構,這使得它更加高效和靈活。
要在 C# 專案中使用 GraphQL,需要 HotChocolate 函式庫,這是一個熱門的 .NET GraphQL 端點伺服器實現。
首先,安裝 Hot Chocolate NuGet 套件:
Install-Package HotChocolate.AspNetCore
GraphQL 實現模式定義了在您的 API 中可用的數據類型和操作。 以下是部落格應用程式的 GraphQL 服務架構的簡單範例:
using HotChocolate.Types;
public class QueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Field("hello world")
.Type<StringType>()
.Resolve(context => "Hello, GraphQL!");
}
}
using HotChocolate.Types;
public class QueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Field("hello world")
.Type<StringType>()
.Resolve(context => "Hello, GraphQL!");
}
}
Imports HotChocolate.Types
Public Class QueryType
Inherits ObjectType
Protected Overrides Sub Configure(ByVal descriptor As IObjectTypeDescriptor)
descriptor.Field("hello world").Type(Of StringType)().Resolve(Function(context) "Hello, GraphQL!")
End Sub
End Class
在此範例中,我們定義了一個hello world字段,該字段返回字串"Hello, GraphQL"。!查詢時。
接下來,使用 ASP.NET Core 設置 GraphQL 伺服器:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGraphQLServer()
.AddQueryType<QueryType>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();
});
}
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGraphQLServer()
.AddQueryType<QueryType>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGraphQL();
});
}
}
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.DependencyInjection
Public Class Startup
Public Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddGraphQLServer().AddQueryType(Of QueryType)()
End Sub
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
app.UseRouting()
app.UseEndpoints(Sub(endpoints)
endpoints.MapGraphQL()
End Sub)
End Sub
End Class
現在,讓我們看看如何使用 GraphQL.Client
NuGet 套件從 C# 客戶端查詢此 GraphQL API:
using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
// query class
public class query
{
public static async Task Main()
{
using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
{
EndPoint = new Uri("http://localhost:5000/graphql")
});
var schema = new GraphQLRequest
{
Query = @"
{
hello world
}"
};
var response = await graphQLClient.SendQueryAsync<dynamic>(schema);
Console.WriteLine(response.Data.hello);
}
}
using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
// query class
public class query
{
public static async Task Main()
{
using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
{
EndPoint = new Uri("http://localhost:5000/graphql")
});
var schema = new GraphQLRequest
{
Query = @"
{
hello world
}"
};
var response = await graphQLClient.SendQueryAsync<dynamic>(schema);
Console.WriteLine(response.Data.hello);
}
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off
Imports GraphQL.Client
Imports GraphQL.Client.Http
Imports System
Imports System.Threading.Tasks
' query class
Public Class query
Public Shared Async Function Main() As Task
Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
Dim schema = New GraphQLRequest With {.Query = "
{
hello world
}"}
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Dim response = Await graphQLClient.SendQueryAsync(Of Object)(schema)
Console.WriteLine(response.Data.hello)
End Function
End Class
GraphQL C# 提供了一種強大而靈活的方式來設計 API,並且有了像 HotChocolate 這樣的庫,將 GraphQL 後端整合到您的 C# 應用程式中變得簡單明瞭。 通過定義架構和設置伺服器,您可以通過 GraphQL API 來暴露您的數據,並從 C# 客戶端高效地查詢數據。
IronPDF是一個多功能的 C# 程式庫,讓您可以輕鬆地創建、編輯和操作 PDF 文件。 在本節中,我們將介紹 IronPDF 並演示如何將其與 GraphQL 結合使用以生成動態 PDF 報告。
IronPDF 在其方面表現出色HTML 轉換為 PDF 功能,保留所有佈局和樣式。 它允許從網頁內容創建 PDF,非常適合報告、發票和文檔。 HTML 文件、網址和 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");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. 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")
' 2. 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")
' 3. 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
要開始使用 IronPDF,請安裝 NuGet 套件:
Install-Package IronPdf
讓我們創建一份 PDF 報告,從我們的 GraphQL API 中獲取用戶數據,並以格式化的方式顯示出來。
using IronPdf;
using GraphQL.Client;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
public async Task GeneratePdfAsync()
{
var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
{
EndPoint = new Uri("http://localhost:5000/graphql")
});
// graphql queries & graphql requests
var query = new GraphQLRequest
{
Query = @"
{
hello world
}"
};
var response = await graphQLClient.SendQueryAsync<dynamic>(query);
var helloMessage = response.Data.hello.ToString();
var htmlContent = $@"
<html>
<head><title>GraphQL Report</title></head>
<body>
<h1>GraphQL Report</h1>
<p>{helloMessage}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("GraphQLReport.pdf");
}
}
using IronPdf;
using GraphQL.Client;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
public async Task GeneratePdfAsync()
{
var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
{
EndPoint = new Uri("http://localhost:5000/graphql")
});
// graphql queries & graphql requests
var query = new GraphQLRequest
{
Query = @"
{
hello world
}"
};
var response = await graphQLClient.SendQueryAsync<dynamic>(query);
var helloMessage = response.Data.hello.ToString();
var htmlContent = $@"
<html>
<head><title>GraphQL Report</title></head>
<body>
<h1>GraphQL Report</h1>
<p>{helloMessage}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("GraphQLReport.pdf");
}
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off
Imports IronPdf
Imports GraphQL.Client
Imports GraphQL.Client.Http
Imports System.Threading.Tasks
Imports System
Public Class PdfGenerator
Public Async Function GeneratePdfAsync() As Task
Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
' graphql queries & graphql requests
Dim query As New GraphQLRequest With {.Query = "
{
hello world
}"}
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Dim response = Await graphQLClient.SendQueryAsync(Of Object)(query)
Dim helloMessage = response.Data.hello.ToString()
Dim htmlContent = $"
<html>
<head><title>GraphQL Report</title></head>
<body>
<h1>GraphQL Report</h1>
<p>{helloMessage}</p>
</body>
</html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("GraphQLReport.pdf")
End Function
End Class
在此範例中,我們使用 GraphQL 客戶端從 GraphQL API 獲取「hello world」訊息。 接著,我們構建一個包含此消息的 HTML 模板,然後使用 IronPDF 的 ChromePdfRenderer
將這個 HTML 轉換為 PDF 檔案。
GraphQL 已成為 API 開發中的改革者,提供比傳統的 RESTful API 更靈活和高效的資料查詢和操作方式。它允許客戶端僅請求所需的類型查詢資料的能力,對於現代網路應用程式在性能和靈活性至關重要。
此外,將 GraphQL 與工具和套件結合起來,如IronPDF開啟了生成動態和數據驅動的 PDF 報告的令人興奮的可能性世界。 無論您是在製作發票、生成報告,還是製作任何其他類型的文件,將IronPDF與C#的GraphQL整合為您提供了一種強大且高效的方法來自動化PDF生成。
總結來說,GraphQL 和 C# 是構建現代化、靈活且高效的網絡應用程式的一個強大組合。 使用像 HotChocolate、GraphQL.Client
和 IronPDF 這樣的庫,開發人員擁有構建強大數據驅動應用程式所需的所有工具,以滿足當今數位環境的需求。
將 HTML 轉換為 PDF 的教程可在以下位置獲得IronPDF 授權指南供使用者使用。