.NET ヘルプ

Swashbuckle ASP .NET Core (開発者向けの仕組み)

リーガン・パン
リーガン・パン
2024年1月27日
共有:

イントロダクション

SwashbuckleはC# .NETコアです。NuGet開発されたRESTful Web APIを自動的にドキュメント化するのを助けるパッケージ。 このブログでは、Swashbuckle ASP.NET Coreを探求していきます。IronPDFインストール手順ASP.NET Core Web APIの最新アプリケーション開発を可能にするNuGetパッケージ。 一緒に使用することで、最小限のコードで多くの機能を実現できます。

APIドキュメントページは、Web APIプロジェクトから生成されたswagger.jsonを使用するswagger UIツールで表示されます。 生成されたJSONドキュメントはオープンAPI標準に従います。 Swashbuckle は NuGet パッケージとして利用可能です。Swashbuckle.AspNetCoreインストールおよび構成されると、Swagger JSONを自動的に公開します。 スワッガーUIツールは、APIに記述されたXMLコメントから生成されるスワッガーJSONファイルを読み取ります。また、プロジェクト設定ファイルで有効にすることにより、XMLドキュメンテーションファイルを作成することもできます。XMLコメントはXMLドキュメンテーションファイルに変換され、そこからスワッガーJSONが生成されます。 その後、SwaggerミドルウェアがJSONを読み取り、Swagger JSONエンドポイントを公開します。

.NET Core Web APIプロジェクトでの実装

では、Web APIプロジェクトから始めましょう。

dotnet new webapi -n SwashbuckleDemo
cd Swashbuckle
dotnet build
dotnet add package --version 6.5.0 Swashbuckle.AspNetCore
dotnet build
dotnet new webapi -n SwashbuckleDemo
cd Swashbuckle
dotnet build
dotnet add package --version 6.5.0 Swashbuckle.AspNetCore
dotnet build

ここでは「SwashbuckleDemo」というWeb APIプロジェクトを作成し、パッケージマネージャーコンソールから.NET Core Web APIプロジェクトにswashbuckleパッケージをインストールします。

Swagger ミドルウェアの設定

Startup.csファイルでSwaggerサービスを構成します。

public void ConfigureServices(IServiceCollection services)
{
    // Other service configurations...
    // swagger ui components 
    // 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 static file middleware to serve Swagger UI (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });
}
public void ConfigureServices(IServiceCollection services)
{
    // Other service configurations...
    // swagger ui components 
    // 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 static file middleware to serve Swagger UI (HTML, JS, CSS, etc.),
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    });
}

TODOリストAPIのコントローラーも追加してください。

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.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();
});

以下のようにコントローラーを追加することもできます:

using Microsoft.AspNetCore.Mvc;
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();
    }
}
using Microsoft.AspNetCore.Mvc;
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();
    }
}

上記のコードは以下で利用可能ですGitHub - Swashbuckleデモ.

Swashbuckleは以下の機能を提供します。

Swagger UIツール

Swashbuckle ASP .NET Core(開発者向けの動作方法):図1 - Swagger UIツール

Swagger UIは、Web APIアプリケーションのベースURLから「/swagger/index.html」で利用できます。 コードからすべてのREST APIをリストします。 SwaggerジェネレーターはJSONファイルを読み取り、UIを埋めます。

Swagger JSON

Swashbuckle.AspNetCore は、Swagger JSON ファイルを自動的に生成します。このファイルには、エンドポイント、リクエストおよびレスポンスタイプなど、API の構造に関する情報が含まれています。 このJSONファイルは、Swagger/OpenAPI標準をサポートする他のツールやサービスで使用できます。

スワッガーのJSONファイルは、Web APIアプリケーションのベースURLから「/swagger/v1/swagger.json」で利用可能です。

スワッシュバックル ASP .NET コア(開発者向けの動作方法):図2 - スワッガー JSON ファイル。

コードアノテーション

開発者は、XMLコメントと属性を使用して、そのプログラムのドキュメントを作成できます。ASP.NETスワッガー ドキュメントのための追加情報を提供するコアコントローラ。 以下を翻訳してください:

生成された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();
    }
}

構成オプション

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

この行は、Swaggerドキュメントのバージョンを指定するとともに、APIのタイトルやバージョンなどのメタデータを含みます。

c.IncludeXmlComments(xmlPath);
c.IncludeXmlComments(xmlPath);

このオプションを使用すると、コードからのXMLコメントを含めて、Swaggerドキュメントに追加情報を提供できます。 xmlPath変数は、XMLコメントファイルの場所を指す必要があります。

c.DescribeAllParametersInCamelCase();
c.DescribeAllParametersInCamelCase();

このオプションは、パラメータ名にキャメルケースを使用するようにSwaggerジェネレータを設定します。

c.OperationFilter<CustomOperationFilter>();
c.OperationFilter<CustomOperationFilter>();

特定の操作に対するSwaggerドキュメントを変更するために、カスタム操作フィルターを登録することができます。 CustomOperationFilterは、IOperationFilterを実装するクラスです。

Swagger UIオプション

c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");

この行はSwagger UIを設定してドキュメントを表示します。 最初のパラメータはSwagger JSONファイルのURLで、2番目のパラメータはAPIバージョンのユーザーフレンドリーな名前です。

c.RoutePrefix = "swagger";
c.RoutePrefix = "swagger";

Swagger UIのルートプレフィックスを設定することができます。 この例では、Swagger UI は /swagger にて利用可能です。

c.DocExpansion(DocExpansion.None);
c.DocExpansion(DocExpansion.None);

このオプションは、Swagger UIがAPIドキュメントを表示する方法を制御します。 DocExpansion.Noneは、デフォルトで全ての操作を折りたたみます。

SwaggerOptions (スワッガーオプションズ)

c.SerializeAsV2 = true;
c.SerializeAsV2 = true;

このオプションは、Swagger ドキュメントをバージョン2.0形式でシリアライズするかどうかを指定します(True)または3.0形式(偽). Swagger 2.0を使用する場合は、trueに設定してください。

c.DisplayOperationId();
c.DisplayOperationId();

このオプションはSwagger UIに操作IDを表示し、デバッグやAPIの構造を理解するのに役立ちます。

c.OAuthClientId("swagger-ui");
c.OAuthClientId("swagger-ui");

APIがOAuth認証を使用している場合、Swagger UIのOAuthクライアントIDを設定できます。

これらは利用可能な設定オプションのほんの一部です。 Swashbuckle.AspNetCoreライブラリは非常にカスタマイズ可能であり、さまざまなオプションやフィルターを組み合わせることでSwaggerドキュメントを特定のニーズに合わせて調整することができます。 開発環境の公式ドキュメントやIntelliSenseを常に参照して、最新で包括的なオプション情報を確認してください。

IronPDFの紹介

IronPDF 製品概要からの C# PDF ライブラリIron Software ウェブサイトPDFドキュメントの読み取りと生成をサポートします。 それは、スタイル情報を含むフォーマット済みドキュメントを簡単にPDFに変換することができます。 IronPDFはHTMLコンテンツから簡単にPDFを生成することができます。 URLからHTMLコンテンツをダウンロードし、その後PDFを生成することができます。

IronPDFは、ウェブページ、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");
    }
}

インストール

NuGet経由でIronPdfをインストールするインストール方法NuGetパッケージマネージャの詳細またはVisual Studioインストールガイドパッケージ マネージャー コンソール。

パッケージ マネージャー コンソールで、次のコマンドを入力します:

Install-Package IronPdf

Visual Studio を使用して

Swashbuckle ASP .NET Core (スワッシュバックル ASP .NET Core)(開発者向けの仕組み): 図3 - Visual Studioでプロジェクトを開きます。 「ツール」メニューに移動し、「NuGet パッケージ マネージャー」を選択し、「ソリューションの NuGet パッケージを管理」を選択します。 NuGetパッケージマネージャーインターフェイスで、「ブラウズ」タブに「ironpdf」パッケージを検索してください。 次に、最新バージョンのIronPDFを選択してインストールします。

では、私たちのアプリケーションを変更して、ウェブサイトの内容をPDFファイルとしてダウンロードする機能を追加しましょう。

using Microsoft.AspNetCore.Mvc;
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 GetWeatherExcel()
    {
        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);
        // Save the excel file
        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 Celcius: {weather.TemperatureC}</p>
    <p>Temperature in Farenheit: {weather.TemperatureF}</p>
";
        }
        htmlContent += footer;
        return htmlContent;
    }
}
using Microsoft.AspNetCore.Mvc;
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 GetWeatherExcel()
    {
        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);
        // Save the excel file
        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 Celcius: {weather.TemperatureC}</p>
    <p>Temperature in Farenheit: {weather.TemperatureF}</p>
";
        }
        htmlContent += footer;
        return htmlContent;
    }
}

ここでは、気象データを使用してHTML文字列を生成し、その文字列を使用してPDFドキュメントを生成しています。

HTML コンテンツ

Swashbuckle ASP .NET Core (スワッシュバックル ASP .NET Core)(開発者向けの仕組み): 図4 - 天気予報のHTMLコンテンツ。

PDFレポートはこのようになります:

Swashbuckle ASP .NET Core(開発者向けの動作方法):図5 - HTMLからPDFへの出力ファイル:WeatherReport.pdf

コード全体はGitHubにあります。Swashbuckle デモソースコード.

このドキュメントには、トライアルライセンスのための小さな透かしがあり、有効なライセンスを使用することで削除できます。

ライセンス(無料トライアル利用可能)

上記のコードを動作させるためには、ライセンスキーが必要です。 このキーはappsettings.jsonファイルに配置する必要があります。

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

開発者は、次のサイトに登録すると、トライアルライセンスを利用できます。IronPDF トライアル登録. トライアルライセンスにクレジットカードは必要ありません。 メールアドレスを提供し、無料トライアルに登録できます。

結論

SwashbuckleとIronPDFを理解することで、APIドキュメントとPDF生成機能をASP.NET Coreアプリケーションに効果的に統合することができます。 IronPdfはまた、以下のような包括的なドキュメントも提供しています。はじめに、およびさまざまなPDF生成のコード例.

さらに、ソフトウェアの関連製品を検索するコーディングスキルを向上させ、最新のアプリケーション要件を達成するのに役立ちます。

リーガン・パン
ソフトウェアエンジニア
レーガンはリーディング大学で電子工学の学士号を取得しました。Iron Softwareに入社する前の仕事では、一つのタスクに集中して取り組んでいました。Iron Softwareでは、営業、技術サポート、製品開発、マーケティングのいずれにおいても広範な業務に携わることが最も楽しいと感じています。彼は、Iron Softwareライブラリを開発者がどのように使用しているかを理解し、その知識を使ってドキュメントを継続的に改善し、製品を開発することを楽しんでいます。
< 以前
C# ストップウォッチ(開発者のための仕組み)
次へ >
NPlot C#(開発者向けの動作原理)| IronPDF