AzureExtensions.Swashbuckle
5.0.5
dotnet add package AzureExtensions.Swashbuckle --version 5.0.5
NuGet\Install-Package AzureExtensions.Swashbuckle -Version 5.0.5
<PackageReference Include="AzureExtensions.Swashbuckle" Version="5.0.5" />
<PackageVersion Include="AzureExtensions.Swashbuckle" Version="5.0.5" />
<PackageReference Include="AzureExtensions.Swashbuckle" />
paket add AzureExtensions.Swashbuckle --version 5.0.5
#r "nuget: AzureExtensions.Swashbuckle, 5.0.5"
#:package AzureExtensions.Swashbuckle@5.0.5
#addin nuget:?package=AzureExtensions.Swashbuckle&version=5.0.5
#tool nuget:?package=AzureExtensions.Swashbuckle&version=5.0.5
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">
</p>
<p align="center">
</p>
What's New in v5.0.5
- Fixed
ConfigureFunctionsWebApplicationcompatibility — removedAddMvcCore()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 forConfigureFunctionsWebApplicationCreateSwaggerJsonDocumentResult,CreateSwaggerYamlDocumentResult,CreateSwaggerUIResult,CreateSwaggerOAuth2RedirectResult- Uses
ContentResult— noHttpResponseDatapipeline issues
- New
SwaggerValidateself-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
HttpResponseDataextension + 16IActionResultextension + 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
FunctionContextincorrectly 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
IDisposabletoSwashbuckleConfigfor 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:
AddSwashBuckleis fully compatible withConfigureFunctionsWebApplication(ASP.NET Core integration). It does not registerAddMvcCore()— 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 | Versions 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. |
-
net8.0
- Swashbuckle.AspNetCore (>= 10.1.4)
- Swashbuckle.AspNetCore.Newtonsoft (>= 10.1.4)
- Swashbuckle.AspNetCore.Swagger (>= 10.1.4)
-
net9.0
- Swashbuckle.AspNetCore (>= 10.1.4)
- Swashbuckle.AspNetCore.Newtonsoft (>= 10.1.4)
- Swashbuckle.AspNetCore.Swagger (>= 10.1.4)
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 |