AIDE .NET

Swashbuckle ASP .NET Core (Comment cela fonctionne pour les développeurs)

Regan Pun
Regan Pun
janvier 27, 2024
Partager:

Introduction

Swashbuckle est une application C# .NET coreNuGet qui permet de documenter automatiquement les API Web RESTful développées. Dans ce blog, nous allons explorer Swashbuckle ASP.NET core et le système de gestion de l'informationInstructions d'installation d'IronPDF Des packages NuGet, qui permettront le développement d'applications modernes de l'API Web ASP.NET Core. Ensemble, ils permettent une multitude de fonctionnalités qui peuvent être réalisées avec un minimum de code.

Les pages de documentation de l'API sont affichées à l'aide de l'outil swagger UI qui utilise le fichier swagger.json généré à partir du projet d'API Web. Le document JSON généré est conforme à la norme API ouverte. Le Swashbuckle est disponible sous la forme d'un package NuGetSwashbuckle.AspNetCore qui, une fois installé et configuré, exposera automatiquement swagger JSON. L'outil swagger UI lit le fichier swagger JSON, qui est généré à partir des commentaires XML écrits sur les API. En outre, un fichier de documentation XML peut être créé en l'activant dans le fichier de configuration du projet. Les commentaires XML sont convertis en un fichier de documentation XML, à partir duquel swagger JSON est généré. Ensuite, l'intergiciel swagger lit le JSON et expose les points d'extrémité swagger JSON.

Mise en œuvre dans le projet .NET Core Web API

Commençons par un projet d'API Web

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

Ici, nous créons un projet d'API Web "SwashbuckleDemo", puis nous installons le paquet swashbuckle dans le projet d'API Web .NET Core à partir de la console du gestionnaire de paquets.

Configurer l'intergiciel Swagger

Configurer les services Swagger dans le fichier Startup.cs.

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

Ajout d'un contrôleur pour les API de listes de choses à faire

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

Un contrôleur peut également être ajouté comme ci-dessous :

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

Le code ci-dessus est disponible surGitHub - Démonstration de Swashbuckle.

Swashbuckle offre les fonctionnalités suivantes

Outil Swagger UI

Swashbuckle ASP .NET Core(Comment ça marche pour le développeur) : Figure 1 - Outil Swagger UI

L'interface utilisateur Swagger est disponible à "/swagger/index.html" à partir de l'URL de base de l'application de l'API Web. Il répertorie toutes les API REST du code. Le générateur swagger lit le fichier JSON et remplit l'interface utilisateur.

Swagger JSON

Swashbuckle.AspNetCore génère automatiquement le fichier Swagger JSON, qui contient des informations sur la structure de l'API, y compris des détails tels que les points de terminaison, les types de demande et de réponse, et plus encore. Ce fichier JSON peut être utilisé par d'autres outils et services qui supportent le standard Swagger/OpenAPI.

Le fichier JSON de swagger est disponible à "/swagger/v1/swagger.json" à partir de l'URL de base de l'application web API.

Swashbuckle ASP .NET Core(Comment ça marche pour le développeur) : Figure 2 - Le fichier JSON de swagger.

Annotations au code

Les développeurs peuvent utiliser des commentaires et des attributs XML dans leurASP.NET Contrôleurs de base pour fournir des informations supplémentaires pour la documentation swagger. Il s'agit de descriptions, d'exemples et d'autres métadonnées qui améliorent la documentation Swagger générée.

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

Options de configuration

Swashbuckle.AspNetCore propose diverses options de configuration pour personnaliser la manière dont la documentation Swagger est générée. Les développeurs peuvent contrôler quelles API sont documentées, configurer les conventions de dénomination et ajuster d'autres paramètres.

Voici quelques-unes des principales options de configuration fournies par Swashbuckle.AspNetCore :

Options SwaggerGen

c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });

Cette ligne spécifie la version du document Swagger et inclut des métadonnées telles que le titre et la version de votre API.

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

Cette option vous permet d'inclure des commentaires XML dans votre code afin de fournir des informations supplémentaires dans la documentation Swagger. La variable xmlPath doit pointer vers l'emplacement de votre fichier de commentaires XML.

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

Cette option configure le générateur Swagger pour qu'il utilise la camelCase pour les noms de paramètres.

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

Vous pouvez enregistrer des filtres d'opération personnalisés pour modifier la documentation Swagger pour des opérations spécifiques. CustomOperationFilter est une classe qui implémente IOperationFilter.

Options de l'interface utilisateur Swagger

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

Cette ligne configure l'interface utilisateur Swagger pour qu'elle affiche la documentation. Le premier paramètre est l'URL du fichier Swagger JSON, et le second paramètre est un nom convivial pour la version de l'API.

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

Vous pouvez définir le préfixe de l'itinéraire pour l'interface utilisateur Swagger. Dans cet exemple, l'interface utilisateur Swagger sera disponible à l'adresse /swagger.

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

Cette option permet de contrôler la manière dont l'interface utilisateur Swagger affiche la documentation de l'API. DocExpansion.None réduit toutes les opérations par défaut.

Options Swagger

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

Cette option indique s'il faut sérialiser le document Swagger au format de la version 2.0(vrai) ou 3.0(faux). Mettez-le à true si vous voulez utiliser Swagger 2.0.

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

Cette option permet d'afficher l'identifiant de l'opération dans l'interface utilisateur Swagger, ce qui peut être utile pour le débogage et la compréhension de la structure de votre API.

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

Si votre API utilise l'authentification OAuth, vous pouvez configurer l'ID du client OAuth pour Swagger UI.

Il ne s'agit là que de quelques exemples des options de configuration disponibles. La bibliothèque Swashbuckle.AspNetCore est hautement personnalisable, et vous pouvez adapter la documentation Swagger à vos besoins spécifiques en combinant diverses options et filtres. Reportez-vous toujours à la documentation officielle ou à IntelliSense dans votre environnement de développement pour obtenir les informations les plus récentes et les plus complètes sur les options disponibles.

Présentation d'IronPDF

Présentation du produit IronPDF est la bibliothèque PDF C# deSite web d'Iron Software qui permet de lire et de générer des documents PDF. Il peut facilement convertir des documents formatés avec des informations de style en PDF. IronPDF peut facilement générer des PDF à partir de contenu HTML. Il peut télécharger le contenu HTML de l'URL et générer ensuite des PDF.

IronPDF est un excellent outil pour convertir des pages Web, des URL, etHTML en PDFsqui répliquent parfaitement la source. Il est idéal pour générer des PDF de contenus en ligne tels que des rapports et des factures, et crée sans effort des versions PDF de n'importe quelle page web.

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

Installation

Installer IronPDF via NuGet peut être installé à l'aide deDétails sur le gestionnaire de paquets NuGet ou en utilisant leGuide d'installation de Visual Studio Console du gestionnaire de paquets.

Dans la console du gestionnaire de paquets, entrez la commande :

Install-Package IronPdf

Utilisation de Visual Studio

Swashbuckle ASP .NET Core(Comment cela fonctionne-t-il pour les développeurs ?): Figure 3 - Ouvrez votre projet dans Visual Studio. Allez dans le menu "Tools" ;, sélectionnez "NuGet Package Manager" ;, puis "Manage NuGet Packages for Solution" ;. Dans l'interface du gestionnaire de paquets NuGet, recherchez le paquetage "ironpdf" ; dans l'onglet Parcourir. Ensuite, sélectionnez et installez la dernière version d'IronPDF.

Modifions maintenant notre application pour ajouter une fonctionnalité permettant de télécharger le contenu d'un site web au format 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;
    }
}

Ici, nous utilisons les données météorologiques pour générer une chaîne HTML, puis cette chaîne est utilisée pour générer le document PDF.

Contenu HTML

Swashbuckle ASP .NET Core(Comment ça marche pour le développeur) : Figure 4 - Contenu HTML pour les prévisions météorologiques.

Le rapport PDF se présente comme suit :

Swashbuckle ASP .NET Core(Comment ça marche pour le développeur) : Figure 5 - Fichier de sortie HTML vers PDF : WeatherReport.pdf

L'intégralité du code est disponible sur GitHub -Code source de la démo Swashbuckle.

Le document comporte un petit filigrane pour les licences d'essai et peut être supprimé à l'aide d'une licence valide.

Licence (essai gratuit disponible)

Pour que le code ci-dessus fonctionne, une clé de licence est nécessaire. Cette clé doit être placée dans le fichier appsettings.json.

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

Une licence d'essai est disponible pour les développeurs qui s'inscrivent auprès deEnregistrement de la version d'essai d'IronPDF. Aucune carte de crédit n'est nécessaire pour une licence d'essai. Il est possible de fournir l'adresse électronique et de s'inscrire pour un essai gratuit.

Conclusion

La compréhension de Swashbuckle et d'IronPDF vous permet d'intégrer efficacement la documentation des API et les fonctionnalités de génération de PDF dans vos applications ASP.NET Core. IronPDF propose également une documentation complète pourPour commencer, ainsi que diversExemples de code pour la génération de PDF.

En outre, vous pouvezexplorer les produits logiciels connexes d'Iron Software la traduction doit rester professionnelle, en préservant l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement.

Regan Pun
Ingénieur logiciel
Regan est diplômé de l'université de Reading, où il a obtenu une licence en ingénierie électronique. Avant de rejoindre Iron Software, il s'était concentré sur une seule tâche. Ce qu'il apprécie le plus chez Iron Software, c'est la diversité des tâches qu'il peut accomplir, qu'il s'agisse d'apporter une valeur ajoutée aux ventes, à l'assistance technique, au développement de produits ou à la commercialisation. Il aime comprendre comment les développeurs utilisent la bibliothèque d'Iron Software et utiliser ces connaissances pour améliorer continuellement la documentation et développer les produits.
< PRÉCÉDENT
C# Stopwatch (Comment cela fonctionne pour les développeurs)
SUIVANT >
NPlot C# (Comment cela fonctionne pour les développeurs) | IronPDF