Adding Default Headers to Swagger (OpenAPI)

Recently, we had a requirement to pass a mandatory/ default header to all our HTTP POST requests. Our application is built on ASP.NET Core 3.1 and uses Swagger to describe and expose our Web APIs to the consumer.

To ensure that each POST request includes the required header, I intended to add the header information to the Swagger (now OpenAPI) Definition. Here’s how I was able to achieve this.

To use Swagger/ Open API in your .NET Core 3+ application, you need to use Swashbuckle.AspNetCore version 5.0 in your project. At the time of writing, this NuGet package is still in preview.

dotnet add package Swashbuckle.AspNetCore

A typical ASP.NET Core 3.1 Startup project with a Swagger definition looks as below:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "My Awesome Application", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("v1/swagger.json", "My Awesome Application");
});
app.UseEndpoints(endpoints => {
endpoints.MapControllers();
});
}
view raw Startup.cs hosted with ❤ by GitHub

To add the default header to each POST request, implement IOperationFilter as below:

using System;
using System.Net.Http;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace MyAwesomeApplication
{
public class DefaultHeaderFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (string.Equals(context.ApiDescription.HttpMethod, HttpMethod.Post.Method, StringComparison.InvariantCultureIgnoreCase))
{
operation.Parameters.Add(new OpenApiParameter
{
Name = "my-default-header",
In = ParameterLocation.Header,
Required = false,
Example = new OpenApiString("my-default-header-value")
});
}
}
}
}

Now, Update AddSwaggerGenCommand in Startup → ConfigureServices method to include the new DefaultHeaderFilter

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "My Awesome Application", Version = "v1" });
c.OperationFilter<DefaultHeaderFilter>();
});
}
view raw Startup.cs hosted with ❤ by GitHub

That’s it! Your Swagger UI will now have the default header for each POST request with this change.

Swagger with Default Header