IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

Swashbuckle ASP .NET Core (Geliştiriciler için Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

Swashbuckle, RESTful Web API'lerini otomatik olarak belgelemeye yardımcı olan bir C# .NET Core NuGet paketidir. Bu blogda, Swashbuckle ASP.NET Core ve IronPDF Kurulum Talimatları NuGet paketlerini inceleyeceğiz ve ASP.NET Core Web API'lerini modern geliştirme sağlayacağız. Birlikte, minimum kod ile elde edilebilecek bir dizi işlevsellik sağlarlar.

API dokümantasyon sayfaları, Web API projesinden üretilen bir swagger.json dosyasını kullanan Swagger UI aracı kullanılarak görüntülenir. Oluşturulan JSON belgesi, Open API standardına uyar. Swashbuckle, kurulup yapılandırıldığında, otomatik olarak Swagger JSON'u açığa çıkaracak Swashbuckle.AspNetCore olarak bir NuGet paketi olarak mevcuttur. Swagger UI aracı, API'ler üzerinde yazılı XML yorumlarından üretilen Swagger JSON dosyasını okur. Ek olarak, proje ayarları dosyasında etkinleştirilerek bir XML belgeleme dosyası oluşturulabilir. XML yorumları, Swagger JSON'un üretildiği bir XML belgeleme dosyasına dönüştürülür. Daha sonra, Swagger ara katmanı JSON'u okuyarak Swagger JSON uç noktalarını açığa çıkarır.

.NET Core Web API projesinde Uygulama

Bir Web API projesi ile başlayalım:

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

Burada, "SwashbuckleDemo" adlı bir web API projesi oluşturuyoruz ve ardından Swashbuckle paketini .NET Core Web API projesine Paket Yöneticisi Konsolu'nu kullanarak yüklüyoruz.

Swagger Middleware'i Yapılandırma

Swagger servislerini Startup.cs dosyasında yapılandırın.

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

Yapılacak işleri listeleyen API'ler için bir denetleyici ekleyin:

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

Aşağıda gösterildiği gibi bir denetleyici de eklenebilir:

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

Yukarıdaki kod GitHub - Swashbuckle Demo üzerinde mevcuttur.

Swashbuckle aşağıdaki özellikleri sunar

Swagger UI aracı

Swashbuckle ASP .NET Core (Geliştirici İçin Nasıl Çalışır): Şekil 1 - Swagger UI aracı

Swagger UI, Web API uygulamasının taban URL'sinden "/swagger/index.html" adresinde mevcuttur. Koddan tüm REST API'lerini listeler. Swagger üreteci, JSON dosyasını okur ve UI'yı doldurur.

Swagger JSON

Swashbuckle.AspNetCore otomatik olarak, uç noktalar, istek ve yanıt türleri gibi API'nin yapısı hakkında bilgi içeren Swagger JSON dosyasını üretir. Bu JSON dosyası, Swagger/OpenAPI standardını destekleyen diğer araçlar ve hizmetler tarafından kullanılabilir.

Swagger JSON dosyası, web API uygulamasının taban URL'sinden "/swagger/v1/swagger.json" adresinde mevcuttur.

Swashbuckle ASP .NET Core (Geliştirici İçin Nasıl Çalışır): Şekil 2 - Swagger JSON dosyası.

Kod Açıklamaları

Geliştiriciler, Swagger belgelerine ek bilgi sağlamak için ASP.NET Core denetleyicilerinde XML yorumlarını ve niteliklerini kullanabilirler. Bu, oluşturulan Swagger belgesini geliştiren tanımlar, örnekler ve diğer meta verileri içerir.

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

Yapılandırma Seçenekleri

Swashbuckle.AspNetCore, Swagger belgesinin nasıl üretileceğini özelleştirmek için çeşitli yapılandırma seçenekleri sağlar. Geliştiriciler hangi API'lerin belgeleneceğini kontrol edebilir, adlandırma kurallarını yapılandırabilir ve diğer ayarları ayarlayabilirler.

Swashbuckle.AspNetCore tarafından sunulan ana yapılandırma seçeneklerinden bazıları şunlardır:

SwaggerGen Seçenekleri

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

Bu satır, Swagger belge sürümünü belirtir ve API'nizin başlığı ve sürümü gibi meta verileri içerir.

c.IncludeXmlComments(xmlPath);

Bu seçenek, Swagger belgelerine ek bilgi sağlamak amacıyla kodunuzdan XML yorumlarını dahil etmenize olanak tanır. xmlPath değişkeni, XML yorumları dosyanızın konumunu işaret etmeli.

c.DescribeAllParametersInCamelCase();

Bu seçenek, Swagger üretecini parametre adları için camelCase kullanacak şekilde yapılandırır.

c.OperationFilter<CustomOperationFilter>();

Belirli işlemler için Swagger belgesini değiştirmek için özel operasyon filtreleri kaydedebilirsiniz. CustomOperationFilter, IOperationFilter'i uygulayan bir sınıftır.

Swagger UI Seçenekleri

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

Bu satır, Swagger UI'nın belgeyi görüntülemesi için yapılandırır. İlk parametre, Swagger JSON dosyasının URL'si ve ikinci parametre, API sürümü için kullanıcı dostu bir addır.

c.RoutePrefix = "swagger";

Swagger UI için rota ön ekini ayarlayabilirsiniz. Bu örnekte, Swagger UI /swagger adresinde mevcut olacaktır.

c.DocExpansion(DocExpansion.None);

Bu seçenek, Swagger UI'nın API belgesini nasıl görüntülediğini kontrol eder. DocExpansion.None varsayılan olarak tüm işlemleri daraltır.

SwaggerOptions

c.SerializeAsV2 = true;

Bu seçenek Swagger belgesini 2.0 sürüm formatında (true) veya 3.0 sürüm formatında (false) seri hale getirip getirmeyeceğini belirler. Swagger 2.0 kullanmak istiyorsanız, bunu true olarak ayarlayın.

c.DisplayOperationId();

Bu seçenek, Swagger UI'sında işlem kimliğini görüntüleyerek, API'nizin yapısını anlamak ve hata ayıklama için faydalı olabilir.

c.OAuthClientId("swagger-ui");

API'niz OAuth kimlik doğrulaması kullanıyorsa, Swagger UI için OAuth istemci kimliğini yapılandırabilirsiniz.

Bu, mevcut yapılandırma seçeneklerinden sadece birkaç örnektir. Swashbuckle.AspNetCore kütüphanesi oldukça özelleştirilebilir ve çeşitli seçenekler ve filtreleri bir arada kullanarak Swagger belgelerini ihtiyaçlarınıza uygun hale getirebilirsiniz. Mevcut seçenekler hakkında en güncel ve kapsamlı bilgileri almak için her zaman resmi belgeleri veya geliştirme ortamınızdaki IntelliSense'i referans alın.

IronPDF Tanıtımı

IronPDF Ürün Genel Bakış, PDF belgelerini okumaya ve oluşturmaya yardımcı olan Iron Software Web Sitesi'nden C# PDF Library'dir. Biçimlendirilmiş belgeleri stil bilgisi ile birlikte kolayca PDF'ye dönüştürebilir. IronPDF, HTML içeriğinden çok kolay bir şekilde PDF oluşturabilir. Bir URL'den HTML içeriğini indirir ve ardından PDF'ler oluşturur.

IronPDF, web sayfalarını, URL'leri ve HTML'yi PDF'ye dönüştürmek için harika bir araçtır ve kaynağı mükemmel bir şekilde yeniden oluşturur. Çevrimiçi içeriklerin, raporların ve faturaların PDF versiyonlarını oluşturmak için idealdir ve herhangi bir web sayfasının PDF versiyonunu kolayca hazırlar.

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

Kurulum

NuGet Üzerinden IronPDF Kurun kullanarak NuGet Paket Yöneticisi Detayları veya Visual Studio Kurulum Kılavuzu paket yöneticisi konsolu ile.

Paket Yöneticisi Konsolu'na komutu girin:

PM > Install-Package IronPdf

Visual Studio Kullanarak

! [Swashbuckle ASP .NET Core (Geliştirici İçin Nasıl Çalışır): Şekil 3 - Projeyi Visual Studio'da Açın] "Araçlar" menüsüne gidin, "NuGet Paket Yöneticisi"ni seçin, ardından "Çözüm için NuGet Paketlerini Yönet"'i seçin. NuGet Paketi Yönetici arayüzünde, Gözat sekmesinde "IronPDF" paketini arayın. Daha sonra IronPDF'nin son versiyonunu seçin ve yükleyin.](/static-assets/pdf/blog/swashbuckle-asp-net-core/swashbuckle-asp-net-core-3.webp)

Şimdi, uygulamamızı web sitesi içeriğini PDF dosyası olarak indirmek için fonksiyon eklemek üzere değiştirelim.

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

Burada, HTML dizesi oluşturmak için hava durumu verilerini kullanıyoruz ve ardından bir PDF belgesi oluşturmak için kullanıyoruz.

HTML İçeriği

Swashbuckle ASP .NET Core (Geliştirici İçin Nasıl Çalışır): Şekil 4 - Hava Durumu Tahmini için HTML içeriği.

Ve PDF raporu şu şekilde görünüyor:

Swashbuckle ASP .NET Core (Geliştirici İçin Nasıl Çalışır): Şekil 5 - HTML'den PDF'ye Çıktı dosyası: WeatherReport.pdf

Tüm kod GitHub'da bulunmaktadır - Swashbuckle Demo Kaynak Kodu.
Belgenin deneme lisansları için küçük bir filigranı var, geçerli bir lisansla kaldırılabilir.

Lisanslama (Ücretsiz Deneme Mevcuttur)

Yukarıdaki kodun çalışması için bir lisans anahtarı gereklidir. Bu anahtarı appsettings.json dosyasına yerleştirin.

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

IronPDF Deneme Kaydı ile kaydolduktan sonra geliştiriciler için bir deneme lisansı mevcuttur. Deneme lisansı için kredi kartı gerekmez. Ücretsiz deneme almak için e-posta adresinizle kaydolun.

Sonuç

Swashbuckle ve IronPDF'yi anlamak, ASP.NET Core uygulamalarınıza API belgeleme ve PDF oluşturma yeteneklerini etkili bir şekilde entegre etmenize olanak tanır. IronPDF ayrıca Başlarken için kapsamlı belgeler ve çeşitli PDF Üretim Kodu Örnekleri sunar.

Ayrıca, kodlama yeteneklerinizi geliştirmenize ve modern uygulama gereksinimlerini karşılamanıza yardımcı olacak Iron Software'den ilgili yazılım ürünlerini keşfedebilirsiniz.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez