Azure.Deployments.Extensibility.AspNetCore
0.1.147
Prefix Reserved
dotnet add package Azure.Deployments.Extensibility.AspNetCore --version 0.1.147
NuGet\Install-Package Azure.Deployments.Extensibility.AspNetCore -Version 0.1.147
<PackageReference Include="Azure.Deployments.Extensibility.AspNetCore" Version="0.1.147" />
<PackageVersion Include="Azure.Deployments.Extensibility.AspNetCore" Version="0.1.147" />
<PackageReference Include="Azure.Deployments.Extensibility.AspNetCore" />
paket add Azure.Deployments.Extensibility.AspNetCore --version 0.1.147
#r "nuget: Azure.Deployments.Extensibility.AspNetCore, 0.1.147"
#:package Azure.Deployments.Extensibility.AspNetCore@0.1.147
#addin nuget:?package=Azure.Deployments.Extensibility.AspNetCore&version=0.1.147
#tool nuget:?package=Azure.Deployments.Extensibility.AspNetCore&version=0.1.147
Azure.Deployments.Extensibility.AspNetCore
ASP.NET Core hosting framework for building Bicep extensions. Provides a fluent API for handler registration, middleware pipeline, request routing, and behavior (decorator) chains on top of the Core SDK.
Quick start
using Azure.Deployments.Extensibility.AspNetCore;
ExtensionApplication.Create(args)
.AddExtensionVersion("1.*.*", version => version
.ForResourceType("Fortune", type => type
.AddHandler<FortunePreviewHandler>()
.AddHandler<FortuneCreateOrUpdateHandler>()
.AddHandler<FortuneGetHandler>()
.AddHandler<FortuneDeleteHandler>()))
.Run();
ExtensionApplication handles JSON serialization, error handling, correlation headers, culture propagation, and endpoint routing automatically.
Key concepts
Handler registration
Register handlers by extension version range and optional resource type. The framework auto-detects which handler interfaces each class implements (IResourcePreviewHandler, IResourceCreateOrUpdateHandler, IResourceGetHandler, IResourceDeleteHandler, ILongRunningOperationGetHandler).
app.AddExtensionVersion(">=1.0.0 <2.0.0", version => version
.AddHandler<FallbackHandler>() // default handler for this version range
.ForResourceType("Employee", type => type // resource-type-specific handlers
.AddHandler<EmployeePreviewHandler>()
.AddHandler<EmployeeCreateOrUpdateHandler>()));
Typed handler base classes
Extend one of the typed base classes to work with strongly-typed models instead of raw JsonObject:
| Base class | Operation |
|---|---|
TypedResourcePreviewHandler<TProperties, TIdentifiers> |
Preview |
TypedResourceCreateOrUpdateHandler<TProperties, TIdentifiers> |
Create or update |
TypedResourceGetHandler<TProperties, TIdentifiers> |
Get |
TypedResourceDeleteHandler<TProperties, TIdentifiers> |
Delete |
Each base class automatically deserializes the request and serializes the response using the ASP.NET Core JsonOptions.
Behaviors (decorators)
Behaviors wrap handler invocations for cross-cutting concerns such as validation, logging, or authorization. They execute in order: global → version-scoped → resource-type-scoped.
// Global — runs on every handler invocation.
app.AddGlobalHandlerBehavior<LoggingBehavior>();
app.AddExtensionVersion("1.*.*", version => version
// Version-scoped — runs on all handlers in this version range.
.AddHandlerBehavior<ApiVersionValidationBehavior>()
.ForResourceType("Fortune", type => type
// Resource-type-scoped — runs only on Fortune handlers.
.AddHandlerBehavior<FortuneAuthorizationBehavior>()
.AddHandler<FortuneCreateOrUpdateHandler>()));
Implement IResourcePreviewBehavior, IResourceCreateOrUpdateBehavior, IResourceGetBehavior, IResourceDeleteBehavior, or ILongRunningOperationGetBehavior as needed. A single class can implement multiple behavior interfaces.
Scalar API explorer
Enable a development-time API explorer powered by Scalar with request/response examples:
app.EnableDevelopmentScalarApiExplorer(explorer => explorer
.WithTitle("My Extension API")
.WithExtensionVersions("1.0.0", "2.0.0")
.ConfigureExamples(examples => examples
.ForPreview(requestExample, responseExample)
.ForCreateOrUpdate(requestExample, responseExample)));
Request headers
Read extensibility request headers using HttpContextExtensions:
var clientRequestId = httpContext.GetClientRequestId();
var correlationId = httpContext.GetCorrelationRequestId();
var tenantId = httpContext.GetClientTenantId();
Documentation
- Bicep Extension API Contract v2
- Preview Operation
- Asynchronous Operations
- Sample Extension (Magic Eight Ball)
License
This project is licensed 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 was computed. 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
- Azure.Deployments.Extensibility.Core (>= 0.1.147)
- Microsoft.OpenApi.Readers (>= 1.6.28)
- Scalar.AspNetCore (>= 2.13.22)
- Semver (>= 3.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Azure.Deployments.Extensibility.AspNetCore:
| Package | Downloads |
|---|---|
|
Azure.Deployments.Extensibility.Extensions.Kubernetes
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.