AlefCarlos.AspNetCoreDefaults.WebApi
1.1.5
dotnet add package AlefCarlos.AspNetCoreDefaults.WebApi --version 1.1.5
NuGet\Install-Package AlefCarlos.AspNetCoreDefaults.WebApi -Version 1.1.5
<PackageReference Include="AlefCarlos.AspNetCoreDefaults.WebApi" Version="1.1.5" />
<PackageVersion Include="AlefCarlos.AspNetCoreDefaults.WebApi" Version="1.1.5" />
<PackageReference Include="AlefCarlos.AspNetCoreDefaults.WebApi" />
paket add AlefCarlos.AspNetCoreDefaults.WebApi --version 1.1.5
#r "nuget: AlefCarlos.AspNetCoreDefaults.WebApi, 1.1.5"
#:package AlefCarlos.AspNetCoreDefaults.WebApi@1.1.5
#addin nuget:?package=AlefCarlos.AspNetCoreDefaults.WebApi&version=1.1.5
#tool nuget:?package=AlefCarlos.AspNetCoreDefaults.WebApi&version=1.1.5
AspNetCoreDefaults.WebApi 🔧
Biblioteca de convenções e extensões para padronizar Web APIs ASP.NET Core (OpenAPI, ProblemDetails, health checks, logging e OpenTelemetry).
Objetivo
Fornecer um conjunto mínimo e opinativo de defaults para projetos Web API, facilitando:
- padronização de endpoints (health, alive, app-info)
- integração e configuração de OpenAPI (via
Microsoft.AspNetCore.OpenApi+Scalar.AspNetCore) - tratamento de erros com
ProblemDetails - configuração de logging HTTP e filtros para endpoints sensíveis
- instrumentação OpenTelemetry (tracing e métricas)
APIs principais
WebApplicationBuilder AddWebApiDefaults(this WebApplicationBuilder builder)- chama
AddDefaults()(telemetria, health checks, logging, service discovery) - adiciona
ProblemDetails - registra
OpenApiInfoa partir deApplicationMetadata - registra transformadores de OpenAPI (
OpenApiInfoTransformer)
- chama
void UseProblemDetailsWithDefaults(this WebApplication app)- configura
UseExceptionHandler()eUseStatusCodePages() - habilita
UseDeveloperExceptionPage()emDevelopment
- configura
WebApplication MapDefaultWebApiEndpoints(this WebApplication app)- mapeia endpoints padrão:
/health,/alive,/app-info - mapeia OpenAPI (
MapOpenApi()) e referência de API (MapScalarApiReference("/docs"))
- mapeia endpoints padrão:
WebApplication MapDefaultEndpoints(this WebApplication app)(do pacote base)- configuração de health checks:
/health→ readiness (todos checks)/alive→ liveness (apenas checks com tag"live")
GET /app-info→ retornaApplicationMetadata(excluído da documentação viaExcludeFromDescription())
- configuração de health checks:
Integração OpenAPI
OpenApiInfoé exposto viaIOptions<OpenApiInfo>; o pacote registra umIConfigureOptions<OpenApiInfo>que populaTitleeVersionautomaticamente a partir deApplicationMetadata.
Configurando OpenApiInfo via DI
- Você pode personalizar o
OpenApiInforegistrando sua própria configuração comservices.Configure<OpenApiInfo>(...). As configurações são aplicadas quando o documento OpenAPI é gerado.
// Exemplo: adicionar descrição e contato
builder.Services.Configure<OpenApiInfo>(opts =>
{
opts.Description = "Descrição detalhada da API";
opts.Contact = new OpenApiContact { Name = "Equipe X", Email = "team@example.com" };
});
O
OpenApiInfoTransformeratribuidocument.Info = options.Value, portanto quaisquer propriedades definidas viaConfigure<OpenApiInfo>aparecerão na documentação.A documentação pública fica disponível em
/docs(usandoScalar.AspNetCore)
Logging e filtros
AddHttpLoggingDefaults()habilitaHttpLoggingcom campos: request/response + headers + duration eCombineLogs = true.FilterRequestLoggingInterceptorreduz logs (defineHttpLoggingFields.None) para endpoints que expõem dados sensíveis:/metrics,/env,/health,/alive,/docs,/swagger.- Recomenda-se chamar
app.UseHttpLogging()no pipeline quando apropriado (ex.: em staging/production conforme níveis de log).
OpenTelemetry
- Instrumentação adicionada por padrão: ASP.NET Core, HttpClient e Runtime (métricas e traces).
OTEL_SERVICE_NAME(variável de ambiente) sobrescreve oApplicationNameusado como fonte de traces.- Para habilitar OTLP exporter coloque
OTEL_EXPORTER_OTLP_ENDPOINT; quando presente o exporter OTLP é registrado automaticamente.
Health checks
AddDefaultHealthChecks()adiciona o checkself(taggedlive) que garante liveness por padrão.- Para readiness/live customizados, adicione checks à coleção
IHealthChecksBuildercom tags apropriadas.
Autenticação
O builder.Authentication expõe um AuthenticationDefaultsBuilder que facilita a configuração de autenticação com suporte a múltiplos esquemas.
Registro do dotnet-user-jwts (desenvolvimento)
builder.Authentication
.AddJwtBearerDefaults();
Em Development, o método registra o esquema JWT Bearer com o scheme dotnet-user-jwts e define-o como padrão. Após o registro, gere tokens de teste com:
dotnet user-jwts create --scheme dotnet-user-jwts
O --scheme é necessário para que a ferramenta crie a infraestrutura de user-secrets associada ao scheme correto.
Schemes customizados
O AuthenticationDefaultsBuilder.Schemes é um AuthenticationBuilder — você pode registrar outros esquemas livremente:
builder.Authentication
.AddJwtBearerDefaults()
.Schemes.AddCookie("my-cookie")
.Schemes.AddJwtBearer("external", opts => { /* ... */ });
Por que usar?
- Integração direta com
dotnet user-jwts - Documentação OpenAPI (
Bearer) gerada automaticamente MultiSchemeAuthorizationPolicyProviderinclui o schemedotnet-user-jwtsem todas as políticas de autorização automaticamente
Exemplo rápido (Program.cs)
var builder = WebApplication.CreateBuilder(args);
// Configura defaults opinativos para WebApi (telemetria, logging, health checks, OpenAPI)
builder.AddWebApiDefaults();
builder.Authentication
.AddJwtBearerDefaults();
builder.Services.AddAuthorization();
// Personalize OpenAPI se desejar
builder.Services.Configure<OpenApiInfo>(opts => opts.Description = "Descrição detalhada da API");
var app = builder.Build();
app.UseHttpLogging();
app.UseProblemDetailsWithDefaults();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/", () => new { Message = "Hello, World!" }).WithName("HelloWorld");
// Mapeia endpoints padrão + OpenAPI + docs
app.MapDefaultWebApiEndpoints();
app.Run();
Padrão Result
Este projeto adota o Result Pattern usando a biblioteca Ardalis.Result (e o pacote Ardalis.Result.AspNetCore) para padronizar retornos de operações e facilitar a tradução para respostas HTTP sem lançar exceções para fluxos esperados.
Por que usar ✅
- Evita o uso excessivo de exceções para fluxos esperados (ex.: não encontrado, validação).
- Torna o comportamento das APIs previsível e testável.
- Facilita mapeamento consistente para códigos HTTP, body de erro (ProblemDetails) e documentação (Swagger/OpenAPI).
Integração no projeto 🔧
- Já incluímos
Ardalis.ResulteArdalis.Result.AspNetCorenas dependências (vejaDirectory.Packages.props/ metapacote).
Exemplos (baseados no sample Todo) 💡
Minimal API endpoint (exemplo simplificado):
app.MapPost("/todos", async (IMediator mediator, CreateTodoRequest request) =>
{
var result = await mediator.Send(new CreateTodoCommand(request.Name));
return result.ToCreatedResult();
});
Handler (use case) retornando Result:
public class CreateTodoHandler : ICommandHandler<CreateTodoCommand, Result>
{
public async ValueTask<Result> Handle(CreateTodoCommand command, CancellationToken cancellationToken)
{
// lógica de criação
return Result.Success();
}
}
Como referenciar
- Adicione referência ao projeto
src/AlefCarlos.AspNetCoreDefaults.WebApiou ao metapacotesrc/metapackages/AlefCarlos.AspNetCoreDefaults.WebApi.All. - Chame
builder.AddWebApiDefaults()na construção da aplicação eapp.MapDefaultWebApiEndpoints()no pipeline.
Run & Debug (amostra)
samples/webapi-default.csexemplifica a integração completa. Usedotnet rune verifique/health,/alive,/app-infoe/docs.samples/webapi-default.run.jsoncontém variáveis de ambiente úteis (ASPNETCORE_ENVIRONMENT=Development,OTEL_SERVICE_NAME=sample-api).
Considerações e boas práticas
- Configure níveis de logging via
appsettings.*.jsonpara controlar dados sensíveis em produção. - Teste traces e métricas em ambiente de staging antes de habilitar OTLP em produção.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- AlefCarlos.AspNetCoreDefaults (>= 1.1.5)
- Ardalis.Result.AspNetCore (>= 10.1.0)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 10.0.8)
- Microsoft.AspNetCore.OpenApi (>= 10.0.8)
- Scalar.AspNetCore (>= 2.14.14)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on AlefCarlos.AspNetCoreDefaults.WebApi:
| Package | Downloads |
|---|---|
|
AlefCarlos.AspNetCoreDefaults.WebApi.All
Package Description |
|
|
AlefCarlos.AspNetCore.WebApi
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.5 | 0 | 6/2/2026 |
| 1.1.4 | 0 | 6/1/2026 |
| 1.1.3 | 51 | 5/31/2026 |
| 1.1.2 | 87 | 5/29/2026 |
| 1.1.1 | 49 | 5/28/2026 |
| 1.1.0 | 57 | 5/28/2026 |
| 1.0.4 | 116 | 5/21/2026 |
| 1.0.3 | 132 | 4/25/2026 |
| 1.0.2 | 104 | 4/16/2026 |
| 1.0.1 | 207 | 12/26/2025 |
| 1.0.0 | 208 | 12/24/2025 |
| 0.0.1-rc8 | 197 | 12/24/2025 |
| 0.0.1-rc7 | 193 | 12/24/2025 |
| 0.0.1-rc6 | 205 | 12/24/2025 |