AzureExtensions.Swashbuckle 5.0.5

dotnet add package AzureExtensions.Swashbuckle --version 5.0.5
                    
NuGet\Install-Package AzureExtensions.Swashbuckle -Version 5.0.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AzureExtensions.Swashbuckle" Version="5.0.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AzureExtensions.Swashbuckle" Version="5.0.5" />
                    
Directory.Packages.props
<PackageReference Include="AzureExtensions.Swashbuckle" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AzureExtensions.Swashbuckle --version 5.0.5
                    
#r "nuget: AzureExtensions.Swashbuckle, 5.0.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AzureExtensions.Swashbuckle@5.0.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AzureExtensions.Swashbuckle&version=5.0.5
                    
Install as a Cake Addin
#tool nuget:?package=AzureExtensions.Swashbuckle&version=5.0.5
                    
Install as a Cake Tool

AzureExtensions.Swashbuckle

Swagger and Swagger UI for Azure Functions (isolated worker model) powered by Swashbuckle. Supports OpenAPI 2.0, 3.0, and 3.1.

<p align="center">

CI Auto-Release NuGet NuGet Downloads License: MIT

</p>

<p align="center">

.NET 8 .NET 9 Swashbuckle 10 Swagger UI OpenAPI Azure Functions Tests

</p>


What's New in v5.0.5

  • Fixed ConfigureFunctionsWebApplication compatibility — removed AddMvcCore() which registered the full MVC routing pipeline, conflicting with Azure Functions HTTP routing and causing requests to hang
  • New Integration test CI workflow — validates all Swagger endpoints on both Linux and Windows via func start
  • Cleaned up TestFunction SwaggerController (removed diagnostic logging)

What's New in v5.0.4

  • New IActionResult-based extension methods for ConfigureFunctionsWebApplication
    • CreateSwaggerJsonDocumentResult, CreateSwaggerYamlDocumentResult, CreateSwaggerUIResult, CreateSwaggerOAuth2RedirectResult
    • Uses ContentResult — no HttpResponseData pipeline issues
  • New SwaggerValidate self-test endpoint in TestFunction
  • Fixed startup crash (0x80008096) caused by missing MVC core service registrations
  • Added test fakes (FakeHttpRequestData, FakeHttpResponseData) for extension method testing
  • Added 55 new tests: 25 HttpResponseData extension + 16 IActionResult extension + 14 DI functional (191 total)

What's New in v5.0.1

  • Updated embedded Swagger UI from v5.11 to v5.32.0
  • Fixed resource leaks in response extension methods
  • Fixed route parameter regex matching bug
  • Fixed FunctionContext incorrectly treated as body parameter (#122)
  • Fixed XML documentation file not found in TFM subdirectories (#114)
  • Fixed Content-Type header on JSON/YAML responses (#119)
  • Added IDisposable to SwashbuckleConfig for proper cleanup
  • Added 136 unit, integration, and end-to-end tests

Features

  • Isolated Worker Model — Built for Azure Functions v4 isolated worker (the recommended model going forward)
  • Swashbuckle 10.x — Latest Swashbuckle.AspNetCore with Microsoft.OpenApi v2 support
  • OpenAPI 2.0 / 3.0 / 3.1 — Generate specs in any supported version
  • Swagger UI — Embedded Swagger UI served directly from your Azure Function
  • Multi-document — Define multiple API versions/documents
  • XML Comments — Automatic parameter and response documentation from XML docs
  • Custom Attributes[QueryStringParameter], [RequestHttpHeader], [SwaggerUploadFile], [RequestBodyType]
  • OAuth2 Support — Built-in OAuth2 redirect endpoint and client configuration
  • Newtonsoft.Json — Optional Newtonsoft serialization support
  • Multi-targeting — .NET 8.0 (LTS) and .NET 9.0 (STS)

Installation

dotnet add package AzureExtensions.Swashbuckle

Quick Start

1. Register the Extension in Program.cs

using AzureFunctions.Extensions.Swashbuckle;
using AzureFunctions.Extensions.Swashbuckle.Settings;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices((hostContext, services) =>
    {
        services.AddSwashBuckle(opts =>
        {
            opts.RoutePrefix = "api";
            opts.SpecVersion = OpenApiSpecVersion.OpenApi3_0;
            opts.AddCodeParameter = true;
            opts.PrependOperationWithRoutePrefix = true;
            opts.XmlPath = "MyFunctionApp.xml";
            opts.Documents = new[]
            {
                new SwaggerDocument
                {
                    Name = "v1",
                    Title = "My API",
                    Description = "My Azure Functions API",
                    Version = "v1"
                }
            };
            opts.Title = "My API";
        });
    })
    .Build();

host.Run();

Note: AddSwashBuckle is fully compatible with ConfigureFunctionsWebApplication (ASP.NET Core integration). It does not register AddMvcCore() — only the minimal services needed for API description, so it won't interfere with Azure Functions HTTP routing.

2. Add Swagger Endpoints

Recommended — use IActionResult with ConfigureFunctionsWebApplication:

public class SwaggerController
{
    private readonly ISwashBuckleClient swashBuckleClient;

    public SwaggerController(ISwashBuckleClient swashBuckleClient)
    {
        this.swashBuckleClient = swashBuckleClient;
    }

    [SwaggerIgnore]
    [Function("SwaggerJson")]
    public async Task<IActionResult> SwaggerJson(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "Swagger/json")]
        HttpRequest req)
    {
        return await this.swashBuckleClient.CreateSwaggerJsonDocumentResult(req);
    }

    [SwaggerIgnore]
    [Function("SwaggerYaml")]
    public async Task<IActionResult> SwaggerYaml(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "Swagger/yaml")]
        HttpRequest req)
    {
        return await this.swashBuckleClient.CreateSwaggerYamlDocumentResult(req);
    }

    [SwaggerIgnore]
    [Function("SwaggerUi")]
    public async Task<IActionResult> SwaggerUi(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "Swagger/ui")]
        HttpRequest req)
    {
        return await this.swashBuckleClient.CreateSwaggerUIResult(req, "swagger/json");
    }
}

3. Open Swagger UI

Navigate to https://your-function-app/api/swagger/ui in your browser.


Configuration Options

XML Documentation

Enable XML doc generation in your .csproj:

<PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

Then pass the XML path:

opts.XmlPath = "MyFunctionApp.xml";

Multiple Documents

opts.Documents = new[]
{
    new SwaggerDocument { Name = "v1", Title = "API v1", Version = "v1" },
    new SwaggerDocument { Name = "v2", Title = "API v2", Version = "v2" }
};

OAuth2

opts.ConfigureSwaggerGen = x =>
{
    x.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Flows = new OpenApiOAuthFlows
        {
            Implicit = new OpenApiOAuthFlow
            {
                AuthorizationUrl = new Uri("https://your.idserver.net/connect/authorize"),
                Scopes = new Dictionary<string, string>
                {
                    { "api.read", "Access read operations" },
                    { "api.write", "Access write operations" }
                }
            }
        }
    });
};

opts.ClientId = "your.client.id";
opts.OAuth2RedirectPath = "http://localhost:7071/api/swagger/oauth2-redirect";

Custom Attributes

// Add query string parameters
[QueryStringParameter("page", "Page number", DataType = typeof(int), Required = false)]
[Function("GetItems")]
public async Task<HttpResponseData> GetItems(...)

// Add required HTTP headers
[RequestHttpHeader("X-Api-Key", isRequired: true)]
[Function("SecureEndpoint")]
public async Task<HttpResponseData> SecureEndpoint(...)

// File upload
[SwaggerUploadFile("file", "File to upload")]
[Function("Upload")]
public async Task<HttpResponseData> Upload(...)

Newtonsoft.Json Support

services.AddSwashBuckle(opts =>
{
    opts.AddNewtonsoftSupport = true;
    // ...
});

Migration from v4.x to v5.x

v5.0 includes breaking changes due to the Swashbuckle 10.x / Microsoft.OpenApi v2 upgrade:

Change v4.x v5.x
Swagger document methods Synchronous Async (GetSwaggerJsonDocumentAsync)
OpenAPI schema types Type = "string" Type = JsonSchemaType.String
Nullable schemas Nullable = true JsonSchemaType.X \| JsonSchemaType.Null
OpenAPI namespace Microsoft.OpenApi.Models Microsoft.OpenApi

Async Document Methods

// v4.x
Stream json = client.GetSwaggerJsonDocument(req, "v1");

// v5.x
Stream json = await client.GetSwaggerJsonDocumentAsync(req, "v1");

Sample Project

See the TestFunction project for a complete working example.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

Copyright © 2026, Vitali Bibikov. Code released under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on AzureExtensions.Swashbuckle:

Package Downloads
Service.Extensions.Functions

Extensions to provide consistent configurations and patterns for your service.

Nebularium.Cthulhu.Swagger

Biblioteca para utilização em projetos Azure Functions expond uri do swagger.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on AzureExtensions.Swashbuckle:

Repository Stars
Azure-Samples/saga-orchestration-serverless
An orchestration-based saga implementation reference in a serverless architecture
Version Downloads Last Updated
5.0.5 562 3/9/2026
5.0.4 94 3/9/2026
5.0.3 75 3/9/2026
5.0.2 83 3/9/2026
5.0.1 79 3/9/2026
5.0.0 100 3/9/2026
4.0.4 386,672 8/28/2024
4.0.3 145,085 5/24/2024
4.0.2 23,501 5/15/2024
4.0.1 15,571 5/2/2024
4.0.0-beta 284 5/1/2024
3.3.2 2,079,073 3/24/2021
3.3.1-beta 9,972 2/2/2021
3.3.0-beta 8,536 12/8/2020
3.2.2 696,638 6/17/2020
3.2.1-beta 1,523 6/9/2020
3.2.0-beta 1,565 6/4/2020
3.1.6 92,044 5/10/2020
3.1.5-beta 1,418 5/3/2020
Loading failed