.NETヘルプ Swashbuckle ASP .NET Core (開発者向けの仕組み) Curtis Chau 更新日:7月 28, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article Swashbuckle is a C# .NET Core NuGet package that helps to automatically document RESTful Web APIs. In this blog, we are going to explore the Swashbuckle ASP.NET Core and IronPDF Installation Instructions NuGet packages, enabling the modern development of ASP.NET Core Web APIs. Together, they provide a host of functionalities that can be achieved with minimal code. APIドキュメントページは、Swagger UIツールを使用して表示され、Web APIプロジェクトから生成されたswagger.jsonファイルを使用します。 生成されたJSONドキュメントは、Open API標準に従います。 Swashbuckleは、Swashbuckle.AspNetCoreというNuGetパッケージとして利用可能で、インストールおよび設定すると、自動的にSwagger JSONを公開します。 Swagger UIツールは、APIに記述されたXMLコメントから生成されたSwagger JSONファイルを読み込みます。さらに、プロジェクト設定ファイルで有効にすることでXMLドキュメントファイルを作成できます。XMLコメントはXMLドキュメントファイルに変換され、Swagger JSONが生成されます。 その後、SwaggerミドルウェアはJSONを読み込み、Swagger JSONエンドポイントを公開します。 .NET Core Web APIプロジェクトにおける実装 Web APIプロジェクトから始めましょう。 dotnet new webapi -n SwashbuckleDemo cd SwashbuckleDemo dotnet build dotnet add package Swashbuckle.AspNetCore --version 6.5.0 dotnet build dotnet new webapi -n SwashbuckleDemo cd SwashbuckleDemo dotnet build dotnet add package Swashbuckle.AspNetCore --version 6.5.0 dotnet build SHELL ここでは「SwashbuckleDemo」という名前のWeb APIプロジェクトを作成し、パッケージマネージャーコンソールを使用してSwashbuckleパッケージを.NET Core Web APIプロジェクトにインストールします。 Swaggerミドルウェアの設定 Startup.csファイルでSwaggerサービスを設定します。 using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Builder; public class Startup { public void ConfigureServices(IServiceCollection services) { // Other service configurations... // Register the Swagger generator services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); // Optionally, include XML comments for additional information var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // Other app configurations... // Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger(); // Enable Swagger UI (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); } } using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Builder; public class Startup { public void ConfigureServices(IServiceCollection services) { // Other service configurations... // Register the Swagger generator services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); // Optionally, include XML comments for additional information var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // Other app configurations... // Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger(); // Enable Swagger UI (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); } } Imports System.Reflection Imports Microsoft.Extensions.DependencyInjection Imports Microsoft.AspNetCore.Builder Public Class Startup Public Sub ConfigureServices(ByVal services As IServiceCollection) ' Other service configurations... ' Register the Swagger generator services.AddSwaggerGen(Sub(c) c.SwaggerDoc("v1", New OpenApiInfo With { .Title = "My API", .Version = "v1" }) ' Optionally, include XML comments for additional information Dim xmlFile = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml" Dim xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile) c.IncludeXmlComments(xmlPath) End Sub) End Sub Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IHostingEnvironment) ' Other app configurations... ' Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger() ' Enable Swagger UI (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint. app.UseSwaggerUI(Sub(c) c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1") End Sub) End Sub End Class $vbLabelText $csharpLabel ToDoリストAPIのためのコントローラーを追加します。 using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; // Example to define an entity class public class Todo { public int Id { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } } // Example to define a DbContext class public class TodoDb : DbContext { public DbSet<Todo> Todos => Set<Todo>(); } var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "SwashbuckleDemo!"); app.MapGet("/todoitems", async (TodoDb db) => await db.Todos.ToListAsync()); app.MapGet("/todoitems/complete", async (TodoDb db) => await db.Todos.Where(t => t.IsComplete).ToListAsync()); app.MapGet("/todoitems/{id}", async (int id, TodoDb db) => await db.Todos.FindAsync(id) is Todo todo ? Results.Ok(todo) : Results.NotFound()); app.MapPost("/todoitems", async (Todo todo, TodoDb db) => { db.Todos.Add(todo); await db.SaveChangesAsync(); return Results.Created($"/todoitems/{todo.Id}", todo); }); app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) => { var todo = await db.Todos.FindAsync(id); if (todo is null) return Results.NotFound(); todo.Name = inputTodo.Name; todo.IsComplete = inputTodo.IsComplete; await db.SaveChangesAsync(); return Results.NoContent(); }); app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) => { if (await db.Todos.FindAsync(id) is Todo todo) { db.Todos.Remove(todo); await db.SaveChangesAsync(); return Results.Ok(todo); } return Results.NotFound(); }); app.Run(); using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; // Example to define an entity class public class Todo { public int Id { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } } // Example to define a DbContext class public class TodoDb : DbContext { public DbSet<Todo> Todos => Set<Todo>(); } var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "SwashbuckleDemo!"); app.MapGet("/todoitems", async (TodoDb db) => await db.Todos.ToListAsync()); app.MapGet("/todoitems/complete", async (TodoDb db) => await db.Todos.Where(t => t.IsComplete).ToListAsync()); app.MapGet("/todoitems/{id}", async (int id, TodoDb db) => await db.Todos.FindAsync(id) is Todo todo ? Results.Ok(todo) : Results.NotFound()); app.MapPost("/todoitems", async (Todo todo, TodoDb db) => { db.Todos.Add(todo); await db.SaveChangesAsync(); return Results.Created($"/todoitems/{todo.Id}", todo); }); app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) => { var todo = await db.Todos.FindAsync(id); if (todo is null) return Results.NotFound(); todo.Name = inputTodo.Name; todo.IsComplete = inputTodo.IsComplete; await db.SaveChangesAsync(); return Results.NoContent(); }); app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) => { if (await db.Todos.FindAsync(id) is Todo todo) { db.Todos.Remove(todo); await db.SaveChangesAsync(); return Results.Ok(todo); } return Results.NotFound(); }); app.Run(); Imports Microsoft.AspNetCore.Http.HttpResults Imports Microsoft.AspNetCore.Builder Imports Microsoft.EntityFrameworkCore Imports Microsoft.AspNetCore.Mvc Imports System.Threading.Tasks ' Example to define an entity class Public Class Todo Public Property Id() As Integer Public Property Name() As String Public Property IsComplete() As Boolean End Class ' Example to define a DbContext class Public Class TodoDb Inherits DbContext Public ReadOnly Property Todos() As DbSet(Of Todo) Get Return [Set](Of Todo)() End Get End Property End Class Private builder = WebApplication.CreateBuilder(args) Private app = builder.Build() app.MapGet("/", Function() "SwashbuckleDemo!") app.MapGet("/todoitems", Async Function(db As TodoDb) Await db.Todos.ToListAsync()) app.MapGet("/todoitems/complete", Async Function(db As TodoDb) Await db.Todos.Where(Function(t) t.IsComplete).ToListAsync()) Dim tempVar As Boolean = TypeOf db.Todos.FindAsync(id) Is Todo Dim todo As Todo = If(tempVar, CType(db.Todos.FindAsync(id), Todo), Nothing) app.MapGet("/todoitems/{id}", Async Function(id As Integer, db As TodoDb)If(Await tempVar, Results.Ok(todo), Results.NotFound())) app.MapPost("/todoitems", Async Function(todo As Todo, db As TodoDb) db.Todos.Add(todo) Await db.SaveChangesAsync() Return Results.Created($"/todoitems/{todo.Id}", todo) End Function) app.MapPut("/todoitems/{id}", Async Function(id As Integer, inputTodo As Todo, db As TodoDb) Dim todo = Await db.Todos.FindAsync(id) If todo Is Nothing Then Return Results.NotFound() End If todo.Name = inputTodo.Name todo.IsComplete = inputTodo.IsComplete Await db.SaveChangesAsync() Return Results.NoContent() End Function) app.MapDelete("/todoitems/{id}", Async Function(id As Integer, db As TodoDb) Dim tempVar2 As Boolean = TypeOf db.Todos.FindAsync(id) Is Todo Dim todo As Todo = If(tempVar2, CType(db.Todos.FindAsync(id), Todo), Nothing) If Await tempVar2 Then db.Todos.Remove(todo) Await db.SaveChangesAsync() Return Results.Ok(todo) End If Return Results.NotFound() End Function) app.Run() $vbLabelText $csharpLabel 次のようにコントローラーを追加することも可能です。 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Collections.Generic; using System; using System.Linq; namespace RestFullMinimalApi.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } } } using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Collections.Generic; using System; using System.Linq; namespace RestFullMinimalApi.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } } } Imports Microsoft.AspNetCore.Mvc Imports Microsoft.Extensions.Logging Imports System.Collections.Generic Imports System Imports System.Linq Namespace RestFullMinimalApi.Controllers <ApiController> <Route("[controller]")> Public Class WeatherForecastController Inherits ControllerBase Private Shared ReadOnly Summaries() As String = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" } Private ReadOnly _logger As ILogger(Of WeatherForecastController) Public Sub New(ByVal logger As ILogger(Of WeatherForecastController)) _logger = logger End Sub ''' <summary> ''' Retrieves WeatherForecast ''' </summary> ''' <remarks>Awesomeness!</remarks> ''' <response code="200">Retrieved</response> ''' <response code="404">Not found</response> ''' <response code="500">Oops! Can't lookup your request right now</response> <HttpGet(Name := "GetWeatherForecast")> Public Function [Get]() As IEnumerable(Of WeatherForecast) Return Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With { .Date = DateTime.Now.AddDays(index), .TemperatureC = Random.Shared.Next(-20, 55), .Summary = Summaries(Random.Shared.Next(Summaries.Length)) }).ToArray() End Function End Class Public Class WeatherForecast Public Property [Date]() As DateTime Public Property TemperatureC() As Integer Public Property Summary() As String End Class End Namespace $vbLabelText $csharpLabel 上記のコードはGitHub - Swashbuckle Demoにあります。 Swashbuckleが提供する機能 Swagger UIツール Swagger UIはWeb APIアプリケーションのベースURLから"/swagger/index.html"で利用可能です。 コードからすべてのREST APIをリスト表示します。 SwaggerジェネレーターはJSONファイルを読み込み、UIを生成します。 Swagger JSON Swashbuckle.AspNetCoreは、APIの構造に関する情報(エンドポイント、リクエストおよびレスポンスタイプなどの詳細を含む)を含むSwagger JSONファイルを自動生成します。 このJSONファイルは、Swagger/OpenAPI標準をサポートする他のツールやサービスで使用可能です。 Swagger JSONファイルはWeb APIアプリケーションのベースURLから"/swagger/v1/swagger.json"で利用可能です。 コードアノテーション 開発者はXMLコメントや属性をASP.NET Coreコントローラー内で使用し、Swaggerドキュメントの為の追加情報を提供できます。 これには説明、例、および生成されたSwaggerドキュメントを強化する他のメタデータが含まれます。 [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } <ApiController> <Route("[controller]")> Public Class WeatherForecastController Inherits ControllerBase Private Shared ReadOnly Summaries() As String = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" } Private ReadOnly _logger As ILogger(Of WeatherForecastController) Public Sub New(ByVal logger As ILogger(Of WeatherForecastController)) _logger = logger End Sub ''' <summary> ''' Retrieves WeatherForecast ''' </summary> ''' <remarks>Awesomeness!</remarks> ''' <response code="200">Retrieved</response> ''' <response code="404">Not found</response> ''' <response code="500">Oops! Can't lookup your request right now</response> <HttpGet(Name := "GetWeatherForecast")> Public Function [Get]() As IEnumerable(Of WeatherForecast) Return Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With { .Date = DateTime.Now.AddDays(index), .TemperatureC = Random.Shared.Next(-20, 55), .Summary = Summaries(Random.Shared.Next(Summaries.Length)) }).ToArray() End Function End Class $vbLabelText $csharpLabel 設定オプション Swashbuckle.AspNetCoreは、Swaggerドキュメントの生成方法をカスタマイズできるさまざまな設定オプションを提供します。 開発者はどのAPIをドキュメント化するかを制御し、命名規則を設定し、他の設定を調整できます。 Swashbuckle.AspNetCoreが提供する主要な設定オプションをいくつか紹介します。 SwaggerGenオプション c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); c.SwaggerDoc("v1", New OpenApiInfo With { .Title = "My API", .Version = "v1" }) $vbLabelText $csharpLabel この行はSwaggerドキュメントのバージョンを指定し、APIのタイトルやバージョンなどのメタデータを含みます。 c.IncludeXmlComments(xmlPath); c.IncludeXmlComments(xmlPath); c.IncludeXmlComments(xmlPath) $vbLabelText $csharpLabel このオプションを使用することで、コードからのXMLコメントがSwaggerドキュメントに追加情報として含まれるようにできます。 xmlPath変数はXMLコメントファイルの場所を指すべきです。 c.DescribeAllParametersInCamelCase(); c.DescribeAllParametersInCamelCase(); c.DescribeAllParametersInCamelCase() $vbLabelText $csharpLabel このオプションは、パラメータ名にcamelCaseを使用するようSwaggerジェネレーターを変換します。 c.OperationFilter<CustomOperationFilter>(); c.OperationFilter<CustomOperationFilter>(); c.OperationFilter(Of CustomOperationFilter)() $vbLabelText $csharpLabel 特定の操作のためのSwaggerドキュメントを変更するためにカスタム操作フィルタを登録できます。 CustomOperationFilterはIOperationFilterを実装するクラスです。 Swagger UIオプション c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1") $vbLabelText $csharpLabel この行はSwagger UIを設定してドキュメントを表示します。 最初のパラメータはSwagger JSONファイルのURLであり、2番目のパラメータはAPIバージョンのユーザーフレンドリーな名前です。 c.RoutePrefix = "swagger"; c.RoutePrefix = "swagger"; c.RoutePrefix = "swagger" $vbLabelText $csharpLabel Swagger UIのルートプレフィックスを設定することもできます。 この例では、Swagger UIは/swaggerで利用可能になります。 c.DocExpansion(DocExpansion.None); c.DocExpansion(DocExpansion.None); c.DocExpansion(DocExpansion.None) $vbLabelText $csharpLabel このオプションはSwagger UIがAPIドキュメントをどう表示するかを制御します。 DocExpansion.Noneはデフォルトですべての操作を折りたたみます。 SwaggerOptions c.SerializeAsV2 = true; c.SerializeAsV2 = true; c.SerializeAsV2 = True $vbLabelText $csharpLabel このオプションはSwaggerドキュメントをバージョン2.0フォーマット(true)または3.0フォーマット(false)でシリアル化するかを指定します。 Swagger 2.0を使用したい場合trueに設定します。 c.DisplayOperationId(); c.DisplayOperationId(); c.DisplayOperationId() $vbLabelText $csharpLabel このオプションは操作IDをSwagger UIに表示させ、デバッグとAPI構造の理解に役立ちます。 c.OAuthClientId("swagger-ui"); c.OAuthClientId("swagger-ui"); c.OAuthClientId("swagger-ui") $vbLabelText $csharpLabel APIがOAuth認証を使用する場合は、Swagger UIのOAuthクライアントIDを設定可能です。 これらは利用可能な設定オプションのほんの一例です。 Swashbuckle.AspNetCoreライブラリは非常にカスタマイズ性が高く、さまざまなオプションやフィルタを組み合わせて特定のニーズに合わせてSwaggerドキュメントを調整できます。 常に公式ドキュメントや開発環境でのIntelliSenseで利用可能なオプションに関する最新かつ包括的な情報を参照してください。 Introducing IronPDF IronPDF Product Overview is the C# PDF Library from Iron Software WebsiteのC# PDFライブラリで、PDFドキュメントの読み取りと生成に役立ちます。 スタイル情報付きのフォーマットドキュメントを簡単にPDFに変換できます。 IronPDFはHTMLコンテンツから簡単にPDFを生成できます。 URLからHTMLコンテンツをダウンロードし、PDFを生成します。 IronPDFは、HTMLを忠実に再現するWebページやURL、HTMLをPDFに変換する素晴らしいツールです。 レポートや請求書など、オンラインコンテンツのPDF生成に最適で、任意のウェブページの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 $vbLabelText $csharpLabel インストール Install IronPDF via NuGet using the NuGet Package Manager Details or the Visual Studioインストールガイドのパッケージマネージャーコンソールで使います。 パッケージマネージャーコンソールで次のコマンドを入力します: Install-Package IronPdf Visual Studioを使用する では、ウェブサイトコンテンツをPDFファイルとしてダウンロードする機能を追加するためにアプリケーションを修正しましょう。 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using IronPdf; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace RestFullMinimalApi.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } /// <summary> /// Retrieves WeatherForecast as Pdf /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet("download", Name = "DownloadWeatherForecast")] public IActionResult GetWeatherPdf() { var results = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }).ToArray(); var html = GetHtml(results); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); var fileName = "WeatherReport.pdf"; pdf.SaveAs(fileName); var stream = new FileStream(fileName, FileMode.Open); // Return the PDF file for download return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = fileName }; } private static string GetHtml(WeatherForecast[] weatherForecasts) { string header = @" <html> <head><title>WeatherForecast</title></head> <body> <h1>WeatherForecast</h1> "; var footer = @" </body> </html>"; var htmlContent = header; foreach (var weather in weatherForecasts) { htmlContent += $@" <h2>{weather.Date}</h2> <p>Summary: {weather.Summary}</p> <p>Temperature in Celsius: {weather.TemperatureC}</p> <p>Temperature in Fahrenheit: {weather.TemperatureF}</p> "; } htmlContent += footer; return htmlContent; } } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } } using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using IronPdf; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace RestFullMinimalApi.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// Retrieves WeatherForecast /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } /// <summary> /// Retrieves WeatherForecast as Pdf /// </summary> /// <remarks>Awesomeness!</remarks> /// <response code="200">Retrieved</response> /// <response code="404">Not found</response> /// <response code="500">Oops! Can't lookup your request right now</response> [HttpGet("download", Name = "DownloadWeatherForecast")] public IActionResult GetWeatherPdf() { var results = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }).ToArray(); var html = GetHtml(results); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); var fileName = "WeatherReport.pdf"; pdf.SaveAs(fileName); var stream = new FileStream(fileName, FileMode.Open); // Return the PDF file for download return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = fileName }; } private static string GetHtml(WeatherForecast[] weatherForecasts) { string header = @" <html> <head><title>WeatherForecast</title></head> <body> <h1>WeatherForecast</h1> "; var footer = @" </body> </html>"; var htmlContent = header; foreach (var weather in weatherForecasts) { htmlContent += $@" <h2>{weather.Date}</h2> <p>Summary: {weather.Summary}</p> <p>Temperature in Celsius: {weather.TemperatureC}</p> <p>Temperature in Fahrenheit: {weather.TemperatureF}</p> "; } htmlContent += footer; return htmlContent; } } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } } Imports Microsoft.AspNetCore.Mvc Imports Microsoft.Extensions.Logging Imports IronPdf Imports System Imports System.Collections.Generic Imports System.IO Imports System.Linq Namespace RestFullMinimalApi.Controllers <ApiController> <Route("[controller]")> Public Class WeatherForecastController Inherits ControllerBase Private Shared ReadOnly Summaries() As String = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" } Private ReadOnly _logger As ILogger(Of WeatherForecastController) Public Sub New(ByVal logger As ILogger(Of WeatherForecastController)) _logger = logger End Sub ''' <summary> ''' Retrieves WeatherForecast ''' </summary> ''' <remarks>Awesomeness!</remarks> ''' <response code="200">Retrieved</response> ''' <response code="404">Not found</response> ''' <response code="500">Oops! Can't lookup your request right now</response> <HttpGet(Name := "GetWeatherForecast")> Public Function [Get]() As IEnumerable(Of WeatherForecast) Return Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With { .Date = DateTime.Now.AddDays(index), .TemperatureC = Random.Shared.Next(-20, 55), .Summary = Summaries(Random.Shared.Next(Summaries.Length)) }).ToArray() End Function ''' <summary> ''' Retrieves WeatherForecast as Pdf ''' </summary> ''' <remarks>Awesomeness!</remarks> ''' <response code="200">Retrieved</response> ''' <response code="404">Not found</response> ''' <response code="500">Oops! Can't lookup your request right now</response> <HttpGet("download", Name := "DownloadWeatherForecast")> Public Function GetWeatherPdf() As IActionResult Dim results = Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With { .Date = DateTime.Now.AddDays(index), .TemperatureC = Random.Shared.Next(-20, 55), .Summary = Summaries(Random.Shared.Next(Summaries.Length)) }).ToArray() Dim html = GetHtml(results) Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(html) Dim fileName = "WeatherReport.pdf" pdf.SaveAs(fileName) Dim stream = New FileStream(fileName, FileMode.Open) ' Return the PDF file for download Return New FileStreamResult(stream, "application/octet-stream") With {.FileDownloadName = fileName} End Function Private Shared Function GetHtml(ByVal weatherForecasts() As WeatherForecast) As String Dim header As String = " <html> <head><title>WeatherForecast</title></head> <body> <h1>WeatherForecast</h1> " Dim footer = " </body> </html>" Dim htmlContent = header For Each weather In weatherForecasts htmlContent &= $" <h2>{weather.Date}</h2> <p>Summary: {weather.Summary}</p> <p>Temperature in Celsius: {weather.TemperatureC}</p> <p>Temperature in Fahrenheit: {weather.TemperatureF}</p> " Next weather htmlContent &= footer Return htmlContent End Function End Class Public Class WeatherForecast Public Property [Date]() As DateTime Public Property TemperatureC() As Integer Public Property Summary() As String Public ReadOnly Property TemperatureF() As Integer Get Return 32 + CInt(Math.Truncate(TemperatureC / 0.5556)) End Get End Property End Class End Namespace $vbLabelText $csharpLabel ここでは、天気データを使用してHTML文字列を生成し、それを使用してPDFドキュメントを作成します。 HTMLコンテンツ そしてPDFレポートは次のようになります。 完全なコードはGitHub - Swashbuckle Demoソースコードにあります。 ドキュメントには、試用ライセンス用の小さな透かしがありますが、有効なライセンスで削除可能です。 ライセンス (無料トライアル利用可能) 上記のコードを機能させるには、ライセンスキーが必要です。 このキーをappsettings.jsonファイルに配置します。 { "IronPdf": { "LicenseKey": "your license key" } } 試用ライセンスはIronPDF試用登録に登録した開発者が利用可能です。 試用ライセンスにはクレジットカードは不要です。 メールアドレスを登録して無料の試用版を取得してください。 Conclusion SwashbuckleとIronPDFを理解することで、ASP.NET CoreアプリケーションにAPIドキュメントとPDF生成機能を効果的に統合できます。 IronPDF also offers comprehensive documentation for Getting Started, along with various Code Examples for PDF Generation. また、Iron Softwareの関連ソフトウェア製品を探求することで、コーディングスキルを向上させ、現代のアプリケーション要件を満たすことができます。 よくある質問 ASP.NET Core で Swashbuckle を使用して RESTful Web API を記録するにはどうすれば良いですか? Swashbuckle は、コード内の XML コメントから Swagger ドキュメントを生成することにより、RESTful Web API を記録するために使用できます。Swashbuckle.AspNetCore パッケージをインストールし、ASP.NET Core プロジェクトの `Startup.cs` ファイルでそれを構成する必要があります。 新しい ASP.NET Core Web API プロジェクトのために Swashbuckle をセットアップするためにはどの手順が含まれていますか? Swashbuckle をセットアップするには、まず Swashbuckle.AspNetCore NuGet パッケージをインストールします。次に、`ConfigureServices` メソッドで `services.AddSwaggerGen()`を追加し、`Configure` メソッドに `app.UseSwagger()` と `app.UseSwaggerUI()`を追加することにより、`Startup.cs` ファイルで Swagger ミドルウェアを構成します。 .NET Core アプリケーションで HTML コンテンツを PDF に変換するにはどうすればよいですか? IronPDF を使用して .NET Core アプリケーションで HTML コンテンツを PDF に変換できます。このライブラリーを使用すると、`RenderHtmlAsPdf` や `RenderUrlAsPdf` などのメソッドを使用して、HTML 文字列、ファイル、および URL を PDF ドキュメントに変換できます。 API 開発に Swashbuckle を使用する利点は何ですか? Swashbuckle は、Swagger 準拠のドキュメントを自動的に生成することにより、API ドキュメントを簡素化します。これにより、明確かつ一貫した API ドキュメント標準を維持するのに役立ちます。また、Swagger UI を使用して API を探索しテストするためのユーザーフレンドリーなインターフェースも提供します。 ASP.NET Core プロジェクトに PDF 生成機能を統合するにはどうすればよいですか? ASP.NET Core プロジェクトに PDF 生成を統合するには、IronPDF を使用することができます。NuGet 経由で IronPDF ライブラリをインストールし、さまざまなコンテンツタイプから PDF を生成するためにそのメソッドを使用します。プロジェクトに必要な using ディレクティブやライセンスキーが含まれていることを確認してください。 Swashbuckle で Swagger ドキュメントをカスタマイズするために利用可能な構成オプションは何ですか? Swashbuckle では、API バージョニングの設定、XML コメントの有効化、パラメータ命名規則の定義、Swagger UI の外観と動作のカスタマイズなど、Swagger ドキュメントをカスタマイズするためのさまざまな構成オプションを提供しています。 ASP.NET Core プロジェクトで Swashbuckle を使用する際の一般的な問題をトラブルシュートするにはどうすればよいですか? Swashbuckle の一般的な問題は、プロジェクトプロパティで XML ドキュメントが有効になっていることの確認、正しいパッケージバージョンの確認、`Startup.cs` ファイルで正しいセットアップが行われていること、特にミドルウェアの適切な順序が確認されているかを確認することで対処できます。 C# で PDF を生成するための IronPDF の特徴は何ですか? IronPDF は、HTML、URL、ASP.NET コンテンツを PDF に変換する、ヘッダーとフッターを追加する、PDF をマージする、既存の PDF ファイルを操作する機能を提供しています。C# プロジェクトで PDF 操作を処理するための包括的なライブラリーです。 IronPDF が商用利用のためにどのようにライセンスをサポートしているか? IronPDF は商用ライセンスキーを通じてライセンスをサポートしています。IronPDF を無料試用版で試用し、ライセンスキーを通常 `appsettings.json` ファイル内の `IronPdf` セクションにプロジェクト構成に含めることができます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# Stopwatch (開発者向けの仕組み)NPlot C# (開発者向けの仕組み)
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む