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

使用C# HttpClient传递API Key遇未授权错误的解决咨询

问题根源

没错,这就是导致未授权错误的原因。该API的身份验证规则明确要求API密钥通过Query参数传递,而非请求Header——你在Postman里的测试已经验证了这一点:放Header报错、放Query参数成功,说明API根本不识别Header里的鉴权信息。

C# 解决方法

下面是两种在HttpClient中给POST请求添加Query参数的实现方式:

方式1:手动拼接URL(适用于参数少的场景)

直接把API密钥拼接到请求URL末尾,注意参数名要和Postman里用的完全一致(比如api_key、key等):

using System.Net.Http;
using System.Threading.Tasks;

public async Task SendAuthorizedPost()
{
    string apiKey = "你的实际API密钥";
    string baseUrl = "https://api.example.com/target-endpoint";
    // 拼接Query参数,参数名必须和API要求一致
    string requestUrl = $"{baseUrl}?api_key={apiKey}";

    using var httpClient = new HttpClient();
    // 构造POST请求的Body(如果需要传数据的话)
    var postBody = new StringContent("{\"data\":\"test\"}", System.Text.Encoding.UTF8, "application/json");
    
    var response = await httpClient.PostAsync(requestUrl, postBody);
    // 验证请求是否成功,失败会抛出异常
    response.EnsureSuccessStatusCode();
    string result = await response.Content.ReadAsStringAsync();
}

方式2:用QueryHelpers构建URL(推荐,处理复杂参数)

如果有多个Query参数,或者参数值包含特殊字符(比如空格、中文),推荐用QueryHelpers来自动处理URL编码,避免手动拼接的错误。首先需要安装Microsoft.AspNetCore.WebUtilities NuGet包,然后代码:

using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.WebUtilities;

public async Task SendPostWithProperQueryParams()
{
    string apiKey = "你的实际API密钥";
    string baseUrl = "https://api.example.com/target-endpoint";

    // 构建Query参数字典,所有需要传递的参数都放在这里
    var queryParams = new Dictionary<string, string>
    {
        { "api_key", apiKey },
        // 可以添加其他参数,比如{"filter": "active"}
    };

    // 自动生成带正确编码的Query参数的URL
    string requestUrl = QueryHelpers.AddQueryString(baseUrl, queryParams);

    using var httpClient = new HttpClient();
    var postBody = new StringContent("{\"data\":\"test\"}", System.Text.Encoding.UTF8, "application/json");
    
    var response = await httpClient.PostAsync(requestUrl, postBody);
    response.EnsureSuccessStatusCode();
    string result = await response.Content.ReadAsStringAsync();
}
关键注意事项
  • 必须保证Query参数的键名和API要求完全匹配,包括大小写、拼写(比如API要求ApiKey就不能写成api_key)。
  • 不要在请求Header中添加任何Authorization相关字段,否则可能干扰API的鉴权逻辑。
  • 如果API还要求其他Query参数,需要一并添加到参数集合中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:35:05