Getting Started
Bielu.AspNetCore.AsyncApi makes it easy to document your event-driven APIs in ASP.NET Core using a familiar API similar to OpenAPI.
Installation
Install the core package and optionally the attributes package:
# Core package for AsyncAPI document generation
dotnet add package Bielu.AspNetCore.AsyncApi
# Optional: Attributes package for annotating your classes
dotnet add package Bielu.AspNetCore.AsyncApi.Attributes
# Optional: Scalar UI for interactive documentation (recommended)
dotnet add package Scalar.AspNetCore
Basic Configuration
In your Program.cs, add the AsyncAPI services and map the document endpoint.
using Bielu.AspNetCore.AsyncApi.Extensions;
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
// Add AsyncAPI services
builder.Services.AddAsyncApi(options =>
{
options.AddServer("mosquitto", "test.mosquitto.org", "mqtt", server =>
{
server.Description = "Test Mosquitto MQTT Broker";
});
options.WithDefaultContentType("application/json")
.WithInfo("Smartylighting Streetlights API", "1.0.0")
.WithDescription("Manage city streetlights remotely.")
.WithLicense("Apache 2.0", "https://www.apache.org/licenses/LICENSE-2.0");
});
var app = builder.Build();
// Map the AsyncAPI document endpoint (defaults to /asyncapi/v1.json)
app.MapAsyncApi();
// Optional: render the document with Scalar
app.MapScalarApiReference(options =>
{
options.AddAsyncApiDocument("v1", "Streetlights API", "/asyncapi/v1.json");
});
app.Run();
Defining your first Channel
Use attributes to define channels and operations on your message bus or hub classes.
using Bielu.AspNetCore.AsyncApi.Attributes.Attributes;
[AsyncApi] // Tells the library to scan this class
public class StreetlightMessageBus
{
private const string LightMeasuredTopic = "subscribe/light/measured";
[Channel(LightMeasuredTopic, Servers = new[] { "mosquitto" })]
[SubscribeOperation(typeof(LightMeasuredEvent), "Light",
Summary = "Subscribe to environmental lighting conditions for a particular streetlight.")]
public void PublishLightMeasurement(LightMeasuredEvent lightMeasuredEvent)
{
// Logic to publish to your broker
}
}
Accessing the Documentation
Once your app is running:
- JSON Document:
GET /asyncapi/v1.json - Scalar UI:
GET /scalar(if configured)
For more advanced scenarios, see the following guides: