从 Azure 部署生成本地 .NET 密钥

作者:Frank Boucher

排版:Alan Wang

通常,示例项目以一些"魔术字符串"开始,这些变量包含与部署或外部资源相关的 URL 和关键信息,我们必须更改这些信息才能使用示例。例如在 .NET 中,它可能如下所示:

csharp 复制代码
string openAIEndpoint = "https://";
string openAIDeploymentName = "my-ai-model";
string openAiKey = "123456abcd789EFGH";
// ...

本文展示了如何从 Azure 部署自动生成 .NET 密钥以及您的 .NET 应用程序如何读取这些密钥。用户想要尝试使用您的示例时,将不必再编辑任何内容!他们只需使用 azd up 进行部署,然后使用 dotnet run 来执行应用程序。听起来很有趣?下面就来实现一下。

整个项目的代码可以在 GitHub 上的 fboucher/hikerai 中找到。

准备工作

Bicep 是一种为要部署的 Azure 资源创建基础结构定义的语言。由于这些资源将包含端点或模型名称等信息,因此我们需要一种导出这些信息的方法,在 Bicep 中我们使用输出语法:

csharp 复制代码
// some bicep deployment...

output AZURE_OPENAI_ENDPOINT string = ai.outputs.AZURE_OPENAI_ENDPOINT
output AZURE_OPENAI_GPT_NAME string = ai.outputs.AZURE_OPENAI_GPT_NAME
output AZURE_OPENAI_KEY string = ai.outputs.AZURE_OPENAI_KEY

使用 Azure Developer CLI(azd)命令 azd env get-values 返回键对值列表中的所有这些值。PowerShell 或 Bash 脚本可以读取这些内容并使用命令 dotnet user-secrets set 创建新的 .NET secrets。这里是脚本 postprovision.ps1。

csharp 复制代码
function Set-DotnetUserSecrets {
    param ($path, $lines)
    Push-Location
    cd $path
    dotnet user-secrets init
    dotnet user-secrets clear
    foreach ($line in $lines) {
        $name, $value = $line -split '='
        $value = $value -replace '"', ''
        $name = $name -replace '__', ':'
        if ($value -ne '') {
            dotnet user-secrets set $name $value | Out-Null
        }
    }
    Pop-Location
}

$lines = (azd env get-values) -split "`n"
Set-DotnetUserSecrets -path "." -lines $lines

该脚本首先创建一个函数 Set-DotnetUserSecrets,它有两个参数。第一个参数 path 用于将脚本目录更改到该位置。这是确保在需要时创建密钥的关键步骤。第二个参数 lines 包含所有保存键对值的子字符串(例如:VARIABLE_NAME="variable_value")。该脚本循环遍历所有行以分隔名称和值,并为每行创建一个密钥 dotnet user-secrets set name value。

在最后两行,脚本使用 azd env get-values 检索输出生成的环境变量,并将结果拆分为子字符串。它最终将调用之前声明的函数 Set-DotnetUserSecrets 并传递路径和行。存储库中还提供了该脚本的 postprovision.sh 版本。

为了在部署后执行脚本,我们需要在 azure.yaml 文件中添加一个后配置钩子。azure.yaml 是定义和描述项目中包含的应用程序和 Azure 资源类型的架构。这是它的样子。

csharp 复制代码
hooks:
  postprovision:
    windows:
      shell: pwsh
      run: ./infra/post-script/postprovision.ps1
      interactive: true
      continueOnError: true

部署

使用 Azure CLI Developer CLI 命令 azd up 执行部署。您可以使用 fboucher/hikerai 上提供的 HikerAI 代码。克隆或下载存储库后,请确保位于根目录以部署解决方案。

请使用命令 dotnet user-secrets list 测试是否已创建 secrets。

使用密钥

使用 NuGet 包 Microsoft.Extensions.Configuration,应用程序将能够读取用户密钥。您现在可以更换这些神奇的字符串。

csharp 复制代码
// == 检索 Azure 部署期间保存的本地密钥==========
using Microsoft.Extensions.Configuration;

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];

视频

https://www.youtube.com/watch?v=NpE7edalTlQ

总结

本文分享了一些使用从 Azure 部署输出自动生成的用户密钥替换"魔术字符串"的技巧。您可以在您的解决方案中尝试使用它们,或者使用 HikerAI 文件夹中的 fboucher/hikerai 提供的示例。

参考文献

相关推荐
无风听海18 分钟前
ASP.NET Core .NET 10 错误响应体系全景:从 BadRequest 到编译器基础设施
后端·asp.net·.net
AI行业学习1 天前
.NET Framework 3.5 SP1 完整离线包【2026.5.31】
.net
学以智用1 天前
.NET Core 完整特性速查表(终极版)
后端·.net
cdbqss11 天前
VB2026 动态生成工具栏类 BqGetToolStrip
数据库·oracle·开源·.net·学习方法·教育电商·basic
编码者卢布1 天前
【Azure App Service】应用服务(Web App)里的 SNAT 端口 vs 出站连接数:到底是谁限制了谁?
flask·azure·web app
宝桥南山1 天前
Microsoft Agent Framework(MAF) - 如何将workflow或者A2A client转换成一个AI Agent
microsoft·ai·微软·aigc·.net·.netcore
三天不学习2 天前
YOLO + .NET 10 快速入门:从零搭建实时目标检测应用
yolo·目标检测·.net
0x00073 天前
译 Anders Hejlsberg 谈 C# 与 .NET
开发语言·c#·.net
AI行业学习3 天前
.NET Framework 3.5 SP1 完整离线包(2029.5.29)
开发语言·windows·.net
AI行业学习3 天前
.NET Framework 3.5 官方离线包下载+完整安装教程【2026.5.29】
windows·.net·notepad++