记录一下那天晚上的排查过程。.NET 8 项目把 Azure.AI.OpenAI 从 1.0 升到 2.1,创建客户端时抛 ArgumentException,提示 api-version 2024-06-01 不受支持,配置里这个值是运维半年前定的。

刚开始盯着「Azure 资源的模型部署版本较旧」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。2.x 使用新的 API 版本枚举。少数情况下是代码里手写了字符串版本号。

少数情况下是网关层还按旧版本改写请求。

上来先确认 SDK 实际版本

dotnet list package --include-transitive | grep -i openai

接着改用服务端默认版本 不再手写

grep -n AzureOpenAIClientOptions Program.cs

随后用 curl 探一次实际支持的版本

curl -s -o /dev/null -w '%{http_code}' "https://$AZURE_ENDPOINT/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21" -H "api-key: $AZURE_KEY" -H "Content-Type: application/json" -d '{"messages":[{"role":"user","content":"ping"}]}'

末了重新发布并观察首条请求

dotnet run --project src/Api

这台环境是别人交接的,不少默认值被动过,只能一项项核。

改完先别撤,确认这几项。客户端创建成功,聊天请求返回 200,日志里请求 URL 的版本与服务端一致。

容易忽略的是,Azure 的版本号和模型部署是两件事,升级 SDK 只改协议版本,不会自动升级背后的模型。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189