.NETヘルプ Swashbuckle ASP .NET Core (開発者向けの仕組み) Jacob Mellor 更新日:2025年7月28日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る Swashbuckleは、C# .NET CoreのNuGetパッケージで、RESTful Web APIのドキュメントを自動生成するのに役立ちます。このブログでは、Swashbuckle ASP.NET CoreとIronPDFインストール手順NuGetパッケージを探り、ASP.NET Core Web APIの最新の開発を可能にします。これらは、最小限のコードで達成できる多数の機能を提供します。 API ドキュメント ページは、Web API プロジェクトから生成された swagger.json ファイルを使用する Swagger UI ツールを使用して表示されます。 生成された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"); }); } } $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(); $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; } } } $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(); } } $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" }); $vbLabelText $csharpLabel この行はSwaggerドキュメントのバージョンを指定し、APIのタイトルやバージョンなどのメタデータを含みます。 c.IncludeXmlComments(xmlPath); c.IncludeXmlComments(xmlPath); $vbLabelText $csharpLabel このオプションを使用することで、コードからのXMLコメントがSwaggerドキュメントに追加情報として含まれるようにできます。 xmlPath 変数は、XML コメント ファイルの場所を指す必要があります。 c.DescribeAllParametersInCamelCase(); c.DescribeAllParametersInCamelCase(); $vbLabelText $csharpLabel このオプションは、Swagger ジェネレーターがパラメータ名に camelCase を使用するように構成します。 c.OperationFilter<CustomOperationFilter>(); c.OperationFilter<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"); $vbLabelText $csharpLabel この行はSwagger UIを設定してドキュメントを表示します。 最初のパラメータはSwagger JSONファイルのURLであり、2番目のパラメータはAPIバージョンのユーザーフレンドリーな名前です。 c.RoutePrefix = "swagger"; c.RoutePrefix = "swagger"; $vbLabelText $csharpLabel Swagger UIのルートプレフィックスを設定することもできます。 この例では、Swagger UIは/swaggerで利用可能になります。 c.DocExpansion(DocExpansion.None); c.DocExpansion(DocExpansion.None); $vbLabelText $csharpLabel このオプションはSwagger UIがAPIドキュメントをどう表示するかを制御します。 DocExpansion.None はデフォルトですべての操作を折りたたみます。 SwaggerOptions c.SerializeAsV2 = true; c.SerializeAsV2 = true; $vbLabelText $csharpLabel このオプションは、Swagger ドキュメントをバージョン 2.0 形式 (true) でシリアル化するか、3.0 形式 (false) でシリアル化するかを指定します。 Swagger 2.0 を使用する場合は、true に設定してください。 c.DisplayOperationId(); c.DisplayOperationId(); $vbLabelText $csharpLabel このオプションは操作IDをSwagger UIに表示させ、デバッグとAPI構造の理解に役立ちます。 c.OAuthClientId("swagger-ui"); c.OAuthClientId("swagger-ui"); $vbLabelText $csharpLabel APIがOAuth認証を使用する場合は、Swagger UIのOAuthクライアントIDを設定可能です。 これらは利用可能な設定オプションのほんの一例です。 Swashbuckle.AspNetCoreライブラリは非常にカスタマイズ性が高く、さまざまなオプションやフィルタを組み合わせて特定のニーズに合わせてSwaggerドキュメントを調整できます。 常に公式ドキュメントや開発環境でのIntelliSenseで利用可能なオプションに関する最新かつ包括的な情報を参照してください。 IronPDFの紹介 IronPDF製品概要は、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"); } } $vbLabelText $csharpLabel インストール IronPDFをNuGet経由でインストールし、NuGetパッケージマネージャー詳細や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); } } $vbLabelText $csharpLabel ここでは、天気データを使用してHTML文字列を生成し、それを使用してPDFドキュメントを作成します。 HTMLコンテンツ そしてPDFレポートは次のようになります。 完全なコードはGitHub - Swashbuckle Demoソースコードにあります。 ドキュメントには、試用ライセンス用の小さな透かしがありますが、有効なライセンスで削除可能です。 ライセンス (無料トライアル利用可能) 上記のコードを機能させるには、ライセンスキーが必要です。 このキーをappsettings.jsonファイルに配置します。 { "IronPdf": { "LicenseKey": "your license key" } } 試用ライセンスは、IronPDFの試用登録に登録すると開発者向けに利用可能です。 試用ライセンスにはクレジットカードは不要です。 メールアドレスを登録して無料の試用版を取得してください。 結論 SwashbuckleとIronPDFを理解することで、ASP.NET CoreアプリケーションにAPIドキュメントとPDF生成機能を効果的に統合できます。 IronPDFでは、はじめにのための包括的なドキュメントと、さまざまなPDF生成のためのコード例も提供しています。 また、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` セクションにプロジェクト構成に含めることができます。 Jacob Mellor 今すぐエンジニアリングチームとチャット 最高技術責任者(CTO) ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。 関連する記事 更新日 2026年2月20日 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む 更新日 2025年12月20日 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 2025年12月20日 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# Stopwatch (開発者向けの仕組み)NPlot C# (開発者向けの仕組み)
更新日 2026年2月20日 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む
更新日 2025年12月20日 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 2025年12月20日 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む