Support environment variable placeholders in configuration files
Mantenedores costumam responder em até 2 dias
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 52/100
Direção de pesquisa
Comece rastreando o carregamento da configuração para devproxyrc.json e os arquivos de configuração de plugins; depois, leia ProxyUtils.ReplaceVariables, IProxyConfiguration.Env e o caminho de substituição existente de MinimalPermissionsPlugin. Verifique como os valores de ambiente e a seção de configuração env são representados antes de decidir onde a resolução deve ocorrer. O trabalho estará concluído quando os placeholders ${VAR_NAME} forem resolvidos de forma consistente nos arquivos de configuração mostrados sem exigir um script de reescrita, com cobertura para placeholders incorporados, como a URL do issuer.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
Dev Proxy config files (devproxyrc.json and plugin config files like CrudApiPlugin API files) don't support environment variable placeholders. This means values that vary per environment — like Entra app client IDs or tenant IDs — must be hardcoded in config files, or users need to write scripts to patch them before running Dev Proxy.
Example: the workaround today
In the da-ristorante-api-devproxy-entra sample, we need to inject ENTRA_APP_CLIENT_ID and ENTRA_APP_TENANT_ID into the CrudApiPlugin API files. Because Dev Proxy doesn't support this, the sample includes a Node.js script that reads .env.local and rewrites the JSON config files before each run.
The config file looks like this:
{
"entraAuthConfig": {
"audience": "<ENTRA_APP_CLIENT_ID>",
"issuer": "https://login.microsoftonline.com/<ENTRA_APP_TENANT_ID>/v2.0"
}
}
And the script manually replaces those placeholders with values from env files. This works but adds friction — extra tooling, an extra build step, and mutated config files that can accidentally get committed.
What I'd like to see
Support for environment variable references in config files, for example:
{
"entraAuthConfig": {
"audience": "${ENTRA_APP_CLIENT_ID}",
"issuer": "https://login.microsoftonline.com/${ENTRA_APP_TENANT_ID}/v2.0"
}
}
When Dev Proxy loads a config file, it would resolve ${VAR_NAME} placeholders against environment variables (or the env config section).
Why this seems feasible
Dev Proxy already has closely related infrastructure:
- Path tokens:
~appFolderand~dataFolderare resolved viaProxyUtils.ReplacePathTokenswhen loading config/plugin paths @dynamictokens: used in mock responses and rate limiting headers, resolved at runtimeProxyUtils.ReplaceVariables: a general-purpose string replacement utility that replaces variable references in a string given a dictionary of valuesIProxyConfiguration.Env: the proxy configuration already exposes aDictionary<string, string> EnvpropertyMinimalPermissionsPluginalready usesProxyUtils.ReplaceVariables(fileContents, ProxyConfiguration.Env, v => $"{{{v}}}")to resolve{VAR}placeholders in OpenAPI spec files
The pattern is already proven in plugins — it just needs to be applied when loading configuration files too.
Benefits
- No more wrapper scripts to inject environment-specific values
- Config files stay clean and committable (no secrets, no environment-specific values)
- Consistent with how other tools handle this (Docker Compose, Azure Pipelines, GitHub Actions, etc.)
- Works naturally with
.envfiles and CI/CD environments
- Linguagem predominante
- C#
- Estrelas
- 838
- Forks
- 90
- Merge médio
- 2d 11h
- PRs com merge (30d)
- 62
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de dotnet/dev-proxy
-
documentation work in progress
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
dotnet/dev-proxy#1767 · 1 responsável ·
Mantenedores costumam responder em até 2 dias
-
[FEEDBACK]: Option 2: Dev Proxy inside WSL, bash script requires unzipTalvez já em andamento @waldekmastykarz assumiu há 2 dias. Abertadocumentation work in progress
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
dotnet/dev-proxy#1766 · 1 responsável ·
Mantenedores costumam responder em até 2 dias
-
GetTokenizedUrl fails on parenthesized Graph URL segmentsTalvez já em andamento @waldekmastykarz assumiu há 2 dias. Abertawork in progress
dotnet/dev-proxy#2041 · 1 responsável ·
Mantenedores costumam responder em até 2 dias
-
Support discriminator for oneOf in OpenApiValidationPluginTalvez já em andamento @waldekmastykarz assumiu há 2 dias. Abertawork in progress
dotnet/dev-proxy#2040 · 1 responsável ·
Mantenedores costumam responder em até 2 dias
-
Validate language-model mock output against the schema in OpenApiMockResponsePluginTalvez já em andamento @waldekmastykarz assumiu há 2 dias. Abertaon hold
dotnet/dev-proxy#2039 · 1 responsável ·
Mantenedores costumam responder em até 2 dias
Todas as issues de dotnet/dev-proxy
Issues semelhantes
-
bug needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
microsoft/microsoft-ui-xaml#12515 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 2 dias
-
[v5-preview5] `func new` displays incorrect command in error message when project is not initializedAbertaNeeds: Triage (Functions) v5 v5-preview5
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
Azure/azure-functions-core-tools#5838 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Mantenedores costumam responder em até 1 dia
-
customer-reported needs-team-triage question server-Azure.Mcp tools-Pricing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
microsoft/mcp#4087 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Enable "remote"' featureAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100