跳過到頁腳內容
.NET幫助

RestSharp C#(開發者的工作原理)

RestSharp 是一個流行的開源 .NET 程式庫,用於在 C# 中製作 HTTP 請求。 它簡化了使用 RESTful API 的過程,提供了一種直接而靈活的方式與網路服務通訊。 在這篇文章中,我們將探討 RestSharpIronPDF 的關鍵功能,並示範如何提取數據並生成 PDF。

為什麼選擇RestSharp?

在現代的多層級應用程式中,不同的服務需要頻繁通訊,RestSharp 提供了一種簡單且高效的方式來封裝所有的複雜性。 這大大簡化了軟體開發的過程。

安裝RestSharp

RestSharp 可以作為 NuGet 套件使用,並可以安裝到您的 C# 專案中。 您可以使用NuGet套件管理器控制台或Visual Studio NuGet套件管理器UI來進行此操作。

Install-Package RestSharp

進行簡單的GET請求

讓我們從一個簡單的例子開始,使用RestSharp對RESTful API進行GET請求。假設我們想從一個返回使用者資料的公用 ASP.NET CoreAPI 中檢索資訊:

using RestSharp;
namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            // Base URL for the REST API
            var baseUrl = "https://jsonplaceholder.typicode.com/users";

            // Create a RestClientOptions with default credentials
            var options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
            var client = new RestClient(options);

            // Create a RestRequest for the GET method
            var request = new RestRequest();

            // Execute the request and get the response
            var response = client.Get(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Output the response body content
                Console.WriteLine(response.Content);
            }
            else
            {
                // Handle the error
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }

        // Additional method to log data
        public void LogData(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}
using RestSharp;
namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            // Base URL for the REST API
            var baseUrl = "https://jsonplaceholder.typicode.com/users";

            // Create a RestClientOptions with default credentials
            var options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
            var client = new RestClient(options);

            // Create a RestRequest for the GET method
            var request = new RestRequest();

            // Execute the request and get the response
            var response = client.Get(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Output the response body content
                Console.WriteLine(response.Content);
            }
            else
            {
                // Handle the error
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }

        // Additional method to log data
        public void LogData(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}
$vbLabelText   $csharpLabel

RestSharp 還支援使用非同步 API 方法進行非同步請求和回應。

處理回應數據

RestSharp 提供了方便的方法來將回應內容反序列化為 C# 對象。 讓我們擴展我們的例子,將 JSON 回應數據反序列化為使用者對象列表:

// Deserialize JSON response into a list of User objects
var users = JsonSerializer.Deserialize<List<User>>(response.Content);

// Output user information
foreach (var user in users)
{
    Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}, Email: {user.Email}");
}
// Deserialize JSON response into a list of User objects
var users = JsonSerializer.Deserialize<List<User>>(response.Content);

// Output user information
foreach (var user in users)
{
    Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}, Email: {user.Email}");
}
$vbLabelText   $csharpLabel

在此示例中,我們定義了一個User類,其中具有與 JSON 欄位對應的屬性。 我們使用了System.Text.Json命名空間。

public class User
{
    [JsonPropertyName("company")]
    public Company Company { get; set; }

    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("phone")]
    public string Phone { get; set; }

    [JsonPropertyName("website")]
    public string Website { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("username")]
    public string Username { get; set; }

    [JsonPropertyName("email")]
    public string Email { get; set; }

    [JsonPropertyName("address")]
    public Address Address { get; set; }
}
public class User
{
    [JsonPropertyName("company")]
    public Company Company { get; set; }

    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("phone")]
    public string Phone { get; set; }

    [JsonPropertyName("website")]
    public string Website { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("username")]
    public string Username { get; set; }

    [JsonPropertyName("email")]
    public string Email { get; set; }

    [JsonPropertyName("address")]
    public Address Address { get; set; }
}
$vbLabelText   $csharpLabel

輸出

所有使用者的 ID 和姓名都顯示在輸出中。

RestSharp C# (How It Works For Developer): 圖1 - 主控台輸出顯示所有使用者 ID 和姓名。

完整的代碼可在Git上此連結中找到。

內容類型

RestSharp 支援發送XML或JSON的請求體。 RestRequest實例可以用來添加 JSON或 XML 的請求體。 RestSharp 將自動設置內容類型。 它會自動處理 JSON 或 XML 的回應。

// Serialize the user object to JSON
var jsonBodyString = JsonSerializer.Serialize(newUser);

// Create a RestRequest for the POST method with the JSON request data
var requestData = new RestRequest().AddJsonBody(jsonBodyString);
var response = client.ExecutePost(requestData);
// Serialize the user object to JSON
var jsonBodyString = JsonSerializer.Serialize(newUser);

// Create a RestRequest for the POST method with the JSON request data
var requestData = new RestRequest().AddJsonBody(jsonBodyString);
var response = client.ExecutePost(requestData);
$vbLabelText   $csharpLabel

使用POST請求發送數據

RestSharp 也支援在請求體中發送數據,這在創建或更新資源時很常見。 讓我們修改示例以演示POST請求API:

using RestSharp;
using System.Text.Json;

namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            var client = new RestClient("https://jsonplaceholder.typicode.com/users");

            // New user object
            var newUser = new User
            {
                Name = "John Doe",
                Email = "john.doe@example.com"
            };

            // Serialize the user object to JSON
            var jsonBody = JsonSerializer.Serialize(newUser);

            // Create a RestRequest for the POST method with the JSON request body
            var request = new RestRequest().AddJsonBody(jsonBody);

            // Execute the POST request
            var response = client.ExecutePost(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Output the response content
                Console.WriteLine(response.Content);
            }
            else
            {
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }
    }
}
using RestSharp;
using System.Text.Json;

namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            var client = new RestClient("https://jsonplaceholder.typicode.com/users");

            // New user object
            var newUser = new User
            {
                Name = "John Doe",
                Email = "john.doe@example.com"
            };

            // Serialize the user object to JSON
            var jsonBody = JsonSerializer.Serialize(newUser);

            // Create a RestRequest for the POST method with the JSON request body
            var request = new RestRequest().AddJsonBody(jsonBody);

            // Execute the POST request
            var response = client.ExecutePost(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Output the response content
                Console.WriteLine(response.Content);
            }
            else
            {
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }
    }
}
$vbLabelText   $csharpLabel

在此示例中,我們創建了一個新的AddJsonBody方法將其包含在請求體中。 伺服器接收JSON數據並相應地處理請求。

輸出

RestSharp C# (How It Works For Developer): 圖2 - 主控台輸出

身份驗證

RestSharp 也支援發送帶有身份驗證的請求。 RestClientOptions可以包含身份驗證參數。

var options = new RestClientOptions("https://auth.net")
{
    Authenticator = new HttpBasicAuthenticator(_clientId, _clientSecret)
};
var options = new RestClientOptions("https://auth.net")
{
    Authenticator = new HttpBasicAuthenticator(_clientId, _clientSecret)
};
$vbLabelText   $csharpLabel

此處我們使用基本客戶端 ID 和密鑰身份驗證,此身份驗證會在每個請求中發送。

錯誤處理

RestSharp 可以處理URL請求期間發生的錯誤,如超時、身份驗證或授權錯誤。 RestSharp 不會自動丟擲例外,如果請求失敗。 它需要手動配置。

可以採取以下錯誤處理配置:

  • FailOnDeserializationError: 將此屬性設置為true,會告訴RestSharp將反序列化失敗視為錯誤,並相應地設置Error
  • ThrowOnDeserializationError: 將此屬性設置為 true 會告訴 RestSharp 反序列化失敗時丟擲例外。
  • ThrowOnAnyError: 如果請求或反序列化過程中出現任何錯誤,則丟擲例外。
var restClientOptions = new RestClientOptions(url)
{
    ThrowOnAnyError = true
};
var client = new RestClient(restClientOptions);
var restClientOptions = new RestClientOptions(url)
{
    ThrowOnAnyError = true
};
var client = new RestClient(restClientOptions);
$vbLabelText   $csharpLabel

介紹 IronPDF

IronPDF 是來自 Iron Software 的 C# PDF 程式庫,可以幫助閱讀和生成 PDF 文件。 它可以將易於格式化的文檔帶有樣式信息轉換為 PDF。 IronPDF 可以輕鬆從 HTML 內容生成 PDF; 它可以從 URL 下載 HTML 然後生成 PDF。

IronPDF 的一個關鍵功能是HTML到PDF轉換,保留您的所有佈局和樣式。 它將網頁內容轉換為PDF,使之非常適合報告、發票和文檔。 HTML 文件、URL 和 HTML 字符串可以輕鬆轉換為 PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        // Create a PDF renderer using Chrome
        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)
    {
        // Create a PDF renderer using Chrome
        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");
    }
}
$vbLabelText   $csharpLabel

安裝IronPDF程式庫

要使用NuGet套件管理器將IronPDF整合到您的Selenium RestSharp專案中,請按以下步驟進行:

  1. 打開 Visual Studio,然後在方案資源管理器中右鍵單擊您的專案。
  2. 從上下文菜單中選擇"管理 NuGet 套件..."。
  3. 前往"瀏覽"選項卡,然後搜尋 IronPDF。
  4. 從搜尋結果中選擇 IronPDF 程式庫並單擊安裝按鈕。
  5. 接受任何授權協議提示。

如果您想通過套件管理器控制台包括 IronPDF 到專案中,那麼在套件管理控制台中執行以下命令:

Install-Package IronPdf

它將抓取並安裝 IronPDF 到您的專案中。

使用 NuGet 網站安裝

有關 IronPDF 的詳細總覽,包括其功能、相容性及更多下載選項,請訪問 NuGet 網站上的 IronPDF 頁面,網址為https://www.nuget.org/packages/IronPdf

通過 DLL 安裝

作為替代選擇,您可以直接使用其 DLL 文件將 IronPDF 納入您的專案。從 IronPDF 下載中下載包含 DLL 的 ZIP 文件。 解壓縮並將DLL包含到您的專案中。

現在我們將獲取所有使用者並使用HTML字符串和IronPDF生成器生成PDF報告。

using System.Text.Json;
using System.Text.Json.Serialization;
using RestSharp;
using IronPdf;

namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            // Create a RestClient
            var baseUrl = "https://jsonplaceholder.typicode.com/users";
            RestClientOptions options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
            var client = new RestClient(options);

            // Create a RestRequest for the GET method
            var request = new RestRequest();

            // Execute the request and get the response
            var response = client.Get(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Deserialize JSON response into a list of User objects
                var users = JsonSerializer.Deserialize<List<User>>(response.Content);

                // Generate PDF
                var html = GetHtml(users);
                var renderer = new ChromePdfRenderer();
                var pdf = renderer.RenderHtmlAsPdf(html);
                pdf.SaveAs("UsersReport.pdf");
            }
            else
            {
                // Handle the error
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }

        // Method to generate HTML from user data
        private static string GetHtml(List<User>? users)
        {
            string header = @"
<html>
<head><title>Users List</title></head>
<body>
";
            var footer = @"
</body>
</html>";
            var htmlContent = header;
            foreach (var user in users)
            {
                htmlContent += $@"
    <h1>{user.Name}</h1>
    <p>Username: {user.Username}</p>
    <p>Email: {user.Email}</p>
    <p>Company: {user.Company}</p>
    <p>Phone: {user.Phone}</p>
    <p>Website: {user.Website}</p>
    <p>Suite: {user.Address.Suite}</p>
    <p>Street: {user.Address.Street}</p>
    <p>City: {user.Address.City}</p>
    <p>Zipcode: {user.Address.Zipcode}</p>
";
            }
            htmlContent += footer;
            return htmlContent;
        }
    }
}
using System.Text.Json;
using System.Text.Json.Serialization;
using RestSharp;
using IronPdf;

namespace rest_sharp_demo
{
    class Program
    {
        static void Main()
        {
            // Create a RestClient
            var baseUrl = "https://jsonplaceholder.typicode.com/users";
            RestClientOptions options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
            var client = new RestClient(options);

            // Create a RestRequest for the GET method
            var request = new RestRequest();

            // Execute the request and get the response
            var response = client.Get(request);

            // Check if the request was successful
            if (response.IsSuccessful)
            {
                // Deserialize JSON response into a list of User objects
                var users = JsonSerializer.Deserialize<List<User>>(response.Content);

                // Generate PDF
                var html = GetHtml(users);
                var renderer = new ChromePdfRenderer();
                var pdf = renderer.RenderHtmlAsPdf(html);
                pdf.SaveAs("UsersReport.pdf");
            }
            else
            {
                // Handle the error
                Console.WriteLine($"Error: {response.ErrorMessage}");
            }
        }

        // Method to generate HTML from user data
        private static string GetHtml(List<User>? users)
        {
            string header = @"
<html>
<head><title>Users List</title></head>
<body>
";
            var footer = @"
</body>
</html>";
            var htmlContent = header;
            foreach (var user in users)
            {
                htmlContent += $@"
    <h1>{user.Name}</h1>
    <p>Username: {user.Username}</p>
    <p>Email: {user.Email}</p>
    <p>Company: {user.Company}</p>
    <p>Phone: {user.Phone}</p>
    <p>Website: {user.Website}</p>
    <p>Suite: {user.Address.Suite}</p>
    <p>Street: {user.Address.Street}</p>
    <p>City: {user.Address.City}</p>
    <p>Zipcode: {user.Address.Zipcode}</p>
";
            }
            htmlContent += footer;
            return htmlContent;
        }
    }
}
$vbLabelText   $csharpLabel

完整的代碼可在Git上此連結中找到。

這裡我們首先從使用者列表中生成一個HTML字符串,其中包含報告所需的所有格式化。 然後我們使用 IronPDF 生成 PDF 文件。 我們使用 RenderHtmlAsPdf 方法將HTML字符串轉換為PDF文件。 生成的文件如下所示:

RestSharp C# (How It Works For Developer): 圖4 - 輸出 PDF

文件中含有小型浮水印,適用於試用授權,可以通過有效的授權來移除。

授權(提供免費試用)

要使上述代碼正常工作,需要授權金鑰。 此金鑰需要放置在appsettings.json中,如下所示:

{
    "IronPdf.LicenseKey": "your license key"
}

試用授權供已註冊的開發者使用,試用授權不需要信用卡。 一個人可以提供他們的電子郵件ID並註冊免費試用。

結論

RestSharp 程式庫簡化了在 C# 中使用 RESTful API 的過程,提供了一種乾淨且高效的方式進行 HTTP 請求和處理回應。 無論您是通過GET請求檢索數據還是通過POST請求發送數據,RestSharp的直觀API和便捷功能使其成為建構應用程式的開發者的寶貴工具,這些應用程式與網路服務互動。

IronPDF 提供了一種靈活且易於使用的PDF生成解決方案。 有關IronPDF多種功能的其他資訊,請造訪IronPDF 文件頁面

IronPDF 的永久授權將幫助您提高程式技巧和達到現代應用程式要求。

掌握 RestSharp 和 IronPDF 可以增加很大的技能,使開發者能夠創建現代應用程式。

常見問題解答

怎樣在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。您還可以使用 RenderHtmlFileAsPdf 將 HTML 文件轉換為 PDF。

什麼是 C# 中的 RestSharp?

RestSharp 是一個受歡迎的開源 .NET 庫,用於在 C# 中發送 HTTP 請求。它通過提供一種簡單而靈活的方式與網路服務進行通信,簡化了與 RESTful API 的互動。

如何在 C# 專案中安裝 RestSharp?

RestSharp 可以作為 NuGet 套件在您的 C# 專案中安裝。您可以使用 NuGet 套件管理器控制台以命令 Install-Package RestSharp 或通過 Visual Studio NuGet 套件管理器 UI 安裝它。

如何使用 C# 從 API 數據生成 PDF?

您可以使用 RestSharp 從 API 獲取數據,並使用 IronPDF 將該數據轉換為 PDF。首先,使用 RestSharp 獲取數據,然後將該數據格式化為 HTML,這可以使用 IronPDF 轉換為 PDF。

RestSharp 處理錯誤的最佳實踐是什麼?

RestSharp 提供錯誤處理機制,使您可以檢查響應狀態並處理異常。您可以檢查 ResponseStatusStatusCode 屬性,以確定請求是否成功或發生了錯誤。

如何在 RestSharp 響應中處理 JSON 數據?

RestSharp 可以輕鬆處理響應中的 JSON 數據。它提供方法,可以使用類似 System.Text.JsonNewtonsoft.Json 的庫將 JSON 內容反序列化為 C# 對象。

可以在 C# 中將 URL 轉換為 PDF 嗎?

是的,IronPDF 允許您使用 RenderUrlAsPdf 方法將網頁 URL 轉換為 PDF,該方法獲取 URL 的內容並將其轉換為 PDF 文檔。

如何使用 RestSharp 發送 POST 請求並附帶數據?

要使用 RestSharp 發送附帶數據的 POST 請求,請建立新對象,將其序列化為 JSON,然後使用 RestRequestAddJsonBody 方法將其包含在請求主體中。然後使用客戶端執行 POST 請求。

RestSharp 支援認證嗎?

是的,RestSharp 支援帶有身份驗證的請求。您可以在 RestClientOptions 中包含身份驗證參數,例如使用 HttpBasicAuthenticator 進行基本身份驗證。

如何將 PDF 生成集成到我的 C# 應用程序中?

您可以使用 IronPDF 將 PDF 生成集成到您的 C# 應用程序中。它允許您將 HTML 內容、URL 或 HTML 文件轉換為 PDF,這在應用程序中直接生成報告、文檔或發票時非常有用。

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

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me