Nuuvify.CommonPack.Middleware
2.8.0-preview.42
See the version list below for details.
dotnet add package Nuuvify.CommonPack.Middleware --version 2.8.0-preview.42
NuGet\Install-Package Nuuvify.CommonPack.Middleware -Version 2.8.0-preview.42
<PackageReference Include="Nuuvify.CommonPack.Middleware" Version="2.8.0-preview.42" />
<PackageVersion Include="Nuuvify.CommonPack.Middleware" Version="2.8.0-preview.42" />
<PackageReference Include="Nuuvify.CommonPack.Middleware" />
paket add Nuuvify.CommonPack.Middleware --version 2.8.0-preview.42
#r "nuget: Nuuvify.CommonPack.Middleware, 2.8.0-preview.42"
#:package Nuuvify.CommonPack.Middleware@2.8.0-preview.42
#addin nuget:?package=Nuuvify.CommonPack.Middleware&version=2.8.0-preview.42&prerelease
#tool nuget:?package=Nuuvify.CommonPack.Middleware&version=2.8.0-preview.42&prerelease
Nuuvify.CommonPack.Middleware
Middlewares, filtros e extensões de configuração para aplicações ASP.NET Core.
Índice
- Instalação
- Configuração
- Dotenv canônico
- Tratamento de exceções
- Contexto de operação
- Validação
- Segurança
- Compatibilidade
- Troubleshooting
Quando usar
Use este pacote quando a aplicação precisar dos middlewares do pacote ou de carregar secrets montados em configuração hierárquica.
Instalação
<PackageReference Include="Nuuvify.CommonPack.Middleware" Version="2.8.0" />
Configuração
Para secrets montados por Docker, Podman ou Kubernetes, registre o diretório durante o startup:
builder.Configuration.AddContainerSecrets("/run/secrets");
Quando o caminho precisa seguir o padrão do sistema operacional, use o resolvedor sem estado:
var secretsPath = builder.GetContainerSecretsPath();
builder.Configuration.AddContainerSecrets(secretsPath, optional: true);
O padrão é fail-closed (optional: false) e sem recarga automática (reloadOnChange: false). Para um diretório opcional:
builder.Configuration.AddContainerSecrets("/run/secrets", optional: true);
Um arquivo chamado Database__Password fica disponível como Database:Password. O provider KeyPerFile não altera, copia ou remove os arquivos montados. Permissões, montagem e rotação pertencem ao runtime ou ao orquestrador.
O método legado AddEnvironmentVariablesToKeyPerFile continua disponível para compatibilidade, mas está obsoleto. Ele agora captura os valores em memória e pode remover as variáveis somente do processo atual quando removeVariavel for verdadeiro. Para novos mounts de secrets, prefira AddContainerSecrets; para arquivos .env, use AddDotEnvConfiguration.
PathSecrets, SetPathSecretsToOSPlatform e GetPathSecretsToOSPlatform
também estão obsoletos. Eles permanecem para compatibilidade, mas mantêm estado
estático e devem ser substituídos por GetContainerSecretsPath.
Os providers são aplicados na ordem em que são registrados; fontes posteriores podem substituir chaves anteriores.
Dotenv canônico
Para carregar um arquivo .env sem materializar seus valores no ambiente do
processo, use:
builder.AddDotEnvConfiguration();
O parser separa chave e valor no primeiro =, preserva valores vazios,
converte __ em : e insere a fonte abaixo das fontes já registradas. Assim,
variáveis de ambiente reais, secrets montados e argumentos de linha de comando
podem manter precedência conforme a composição do host.
Tratamento de exceções
Para aplicações novas, registre o handler baseado em IExceptionHandler e
ProblemDetailsService no composition root:
builder.Services.AddProblemDetailsExceptionHandler();
O registro é opt-in e deve ser combinado com app.UseExceptionHandler(). O
handler retorna application/problem+json com mensagem genérica e registra a
exceção somente no logger. O middleware legado
UseGlobalExceptionHandlerMiddleware continua disponível para consumidores
existentes e mantém o envelope anterior.
Contexto de operação
Para integrar requisições HTTP ao contexto neutro de observabilidade, registre o accessor e adicione o adapter ao pipeline:
builder.Services.AddOperationContextHeaders();
app.UseOperationContextHeaders();
O adapter preserva o CorrelationId recebido, cria um identificador quando o
header não existe e restaura o contexto anterior ao finalizar a requisição. O
middleware legado UseHandlingHeadersMiddleware continua disponível para
consumidores existentes.
Validação
Para APIs novas, registre a resposta canônica de validação do ASP.NET Core:
builder.Services.AddCanonicalValidation();
Quando o MVC já foi registrado, aplique a extensão diretamente ao builder existente para evitar um segundo registro de controllers:
builder.Services.AddControllers().AddCanonicalValidation();
O setup responde com HTTP 400 e ValidationProblemDetails. O filtro legado
ValidateModelStateCustomAttribute permanece disponível para endpoints que
dependem do contrato anterior com HTTP 417.
Segurança
IConfiguration não é um cofre de secrets. Evite expor valores em logs, diagnósticos, dumps ou endpoints e controle as permissões do diretório montado. O pacote não implementa criptografia, rotação ou eliminação de cópias fora do processo atual.
Compatibilidade
- .NET 8.
- Depende de
Microsoft.Extensions.Configuration.KeyPerFile. - Compatível com diretórios de secrets montados em modo somente leitura.
Troubleshooting
O diretório obrigatório não existe
Verifique o mount e as permissões do runtime. Use optional: true somente quando a ausência do diretório for realmente aceitável.
A chave não aparece na configuração
Confirme o nome do arquivo, o diretório registrado e a ordem dos providers. Use Database__Password para obter Database:Password e não registre o valor do secret durante o diagnóstico.
| 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
- Microsoft.Extensions.Configuration.KeyPerFile (>= 8.0.1)
- Microsoft.Extensions.Hosting (>= 8.0.1)
- Nuuvify.CommonPack.Extensions (>= 2.8.0-preview.42)
- Nuuvify.CommonPack.Middleware.Abstraction (>= 2.8.0-preview.42)
- Nuuvify.CommonPack.Observability (>= 2.8.0-preview.42)
- Nuuvify.CommonPack.Observability.Abstraction (>= 2.8.0-preview.42)
- Nuuvify.CommonPack.Security (>= 2.8.0-preview.42)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.9.0 | 74 | 8/26/2026 |
| 2.9.0-preview.45 | 36 | 8/26/2026 |
| 2.9.0-preview.44 | 43 | 8/26/2026 |
| 2.9.0-preview.43 | 49 | 8/23/2026 |
| 2.8.0 | 155 | 8/11/2026 |
| 2.8.0-preview.42 | 55 | 8/23/2026 |
| 2.8.0-preview.39 | 64 | 8/7/2026 |
| 2.7.0 | 421 | 7/25/2026 |
| 2.7.0-preview.26072428 | 55 | 7/25/2026 |
| 2.7.0-preview.26072419 | 56 | 7/25/2026 |
| 2.7.0-preview.26072416 | 58 | 7/25/2026 |
| 2.7.0-preview.26072413 | 70 | 7/25/2026 |
| 2.7.0-preview.26072410 | 56 | 7/24/2026 |
| 2.7.0-preview.26072406 | 56 | 7/24/2026 |
| 2.7.0-preview.26072302 | 127 | 7/23/2026 |
| 2.5.4 | 409 | 6/26/2026 |
| 2.5.3 | 135 | 6/25/2026 |
| 2.5.2 | 225 | 6/24/2026 |
| 2.5.2-preview.26062502 | 67 | 6/25/2026 |
| 2.5.2-preview.26062402 | 78 | 6/24/2026 |
# Changelog - Nuuvify.CommonPack.Middleware
Todas as mudanças notáveis deste pacote serão documentadas neste arquivo.
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-br/1.0.0/),
e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/spec/v2.0.0.html).
## [Não Lançado]
### Adicionado
- Nova extensão `AddContainerSecrets` para carregar secrets montados usando o provider `KeyPerFile`.
- Handler opt-in baseado em `IExceptionHandler` e `ProblemDetailsService`.
- Adapter HTTP opt-in para preencher `OperationContext` por requisição.
- Loader canônico `AddDotEnvConfiguration` sem mutação do ambiente do processo.
- Setup opt-in `AddCanonicalValidation` com HTTP 400 e `ValidationProblemDetails`.
- Integração de `AddCanonicalValidation` com `IMvcBuilder` existente.
### Compatibilidade
- `PathSecrets`, `SetPathSecretsToOSPlatform` e `GetPathSecretsToOSPlatform` agora emitem aviso de obsolescência não bloqueante; use `GetContainerSecretsPath`.
- `AddEnvironmentVariablesToKeyPerFile` agora emite aviso de obsolescência não bloqueante; use `AddContainerSecrets` ou `AddDotEnvConfiguration`.
- `AddEnvironmentVariablesToMemoryCollection` agora emite aviso de obsolescência não bloqueante; use o provider nativo de variáveis ou `AddDotEnvConfiguration`.
- `ValidateModelStateCustomAttribute`, `FileStreamResultCustom` e `GetFilesBase64` agora emitem avisos de obsolescência não bloqueantes; use os APIs nativos do ASP.NET Core.
### Alterado
### Corrigido
- Carregamento silenciosamente vazio de `AddEnvironmentVariablesToKeyPerFile` após a remoção do diretório temporário.
### Removido
### Segurança
- Eliminada a persistência temporária de secrets em arquivos locais pelo método legado.
- Respostas modernas de exceção não expõem mensagens internas.
## [Sem versão registrada] - 2026-05-29
### Histórico
- Estrutura inicial do changelog padronizada para este pacote.