You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure QnA Service调用报错:CLR/System.TypeInitializationException

问题分析

从报错信息和代码来看,核心问题是你混淆了环境变量名称与QnA服务的实际密钥/端点值。代码中endpointVar、endpointKeyVar、kbIdVar这三个常量应该是环境变量的名称,但你误将QnA的EndpointKey(03947ac53fc346adaff6a52e5a4adf25)直接赋值给了endpointKeyVar,导致Environment.GetEnvironmentVariable()无法找到对应名称的环境变量,返回null,触发了静态构造函数中的异常。

解决方案

以下两种方案任选其一:

方案一:使用环境变量(推荐生产环境)

1. 修正代码中的常量定义

将三个常量改为你要使用的环境变量名称(自定义即可,比如:):

private const string endpointVar = "QNA_ENDPOINT";
private const string endpointKeyVar = "QNA_ENDPOINT_KEY";
private const string kbIdVar = "QNA_KB_ID";

2. 设置对应环境变量

根据你的操作系统执行对应的命令:

  • Windows:打开命令提示符,执行以下命令(替换为你的实际值),设置后需重启IDE/终端生效:
    setx QNA_ENDPOINT "你的QnA服务端点URL"
    setx QNA_ENDPOINT_KEY "你的QnA端点密钥"
    setx QNA_KB_ID "你的知识库ID"
    
  • Linux/macOS:在终端执行以下命令,若需永久生效可将命令添加到~/.bashrc或~/.zshrc文件中:
    export QNA_ENDPOINT="你的QnA服务端点URL"
    export QNA_ENDPOINT_KEY="你的QnA端点密钥"
    export QNA_KB_ID="你的知识库ID"
    

方案二:直接硬编码值(仅用于测试,不推荐生产)

如果只是快速测试,可以跳过环境变量,直接将QnA的实际值赋值给静态变量,同时去掉环境变量检查逻辑:

// 替换原有的const和readonly定义
private static readonly string endpoint = "你的QnA服务端点URL";
private static readonly string endpointKey = "你的QnA端点密钥";
private static readonly string kbId = "你的知识库ID";

// 可删除静态构造函数中的环境变量检查代码
额外优化点

你的请求JSON使用了单引号,虽然部分解析器支持,但标准JSON要求使用双引号,建议修正:

string question = @"{""question"": ""Is the QnA Maker Service free?"",""top"": 3}";

内容的提问来源于stack exchange,提问作者hamzah jazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:54:21