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

Trello REST API创建卡片返回401 仅代码调用触发未授权错误

问题根因

你的代码核心错误是把curl命令的专属参数语法直接拼进了HTTP请求URL,HttpClient不会识别curl的-d、--header这类命令行参数,这些内容被当成URL查询串的一部分,直接污染了key、token鉴权参数,Trello服务端解析不到合法的鉴权信息,自然返回401未授权。

具体错误点:

  • 你拼接的URL末尾附带了整段curl参数 -d '{{\"name\":\"...\"}}' --header \"Content-Type: application/json\",这部分不属于合法URL内容,直接破坏了鉴权参数的有效性
  • 代码中创建的HttpRequestMessage完全没有被使用,调用PostAsync时传入的data是空字符串,既没有正确设置请求头,也没有把卡片数据放到请求体中
  • StringContent默认的Content-Type是text/plain,不符合Trello API要求的application/json格式,即使鉴权通过也可能触发请求格式错误
修复方案
  1. 修正URL拼接逻辑:URL中只保留接口地址、资源定位参数和鉴权参数,完全移除curl命令相关的内容
    正确的URL拼接代码:
    // 注意确认_trelloAPI的值为"https://api.trello.com/1/",末尾带斜杠避免路径拼接错误
    string url = $"{_trelloAPI}cards?idList={listId}&key={_trelloAppKey}&token={_trelloAppToken}";
    
  2. 单独构造JSON请求体:不要把JSON数据拼到URL里,POST请求的业务数据要放在请求体中,禁止手动拼接JSON字符串避免特殊字符导致格式错误,用序列化工具生成JSON:
    // 构造要提交的卡片数据对象
    var postData = new {
        name = card.Name,
        desc = card.Desc
    };
    // 用Unity内置JsonUtility或项目中使用的JSON工具序列化为字符串
    string jsonBody = JsonUtility.ToJson(postData);
    
  3. 修正请求函数,正确设置请求头和请求体:
    private static async Task<bool> SendTrelloPostHttpRequest(string url, string jsonBody) {
        Debug.Log($"Request URL: {url}");
        using (var httpClient = new HttpClient()) {
            // 构造请求内容,指定编码和Content-Type为application/json
            var requestContent = new StringContent(jsonBody, System.Text.Encoding.UTF8, "application/json");
            HttpResponseMessage response = await httpClient.PostAsync(url, requestContent);
            
            if (!response.IsSuccessStatusCode) {
                string errorMsg = await response.Content.ReadAsStringAsync();
                Debug.LogError($"Request failed, code: {response.StatusCode}, detail: {errorMsg}");
                return false;
            }
            string result = await response.Content.ReadAsStringAsync();
            Debug.Log($"Request success, response: {result}");
            return true;
        }
    }
    
校验提示
  • 发起请求前打印最终生成的URL,和ReqBin中测试成功的URL逐字符对比,确认无多余空格、转义字符
  • 如果仍有报错,打印接口返回的完整错误内容,Trello的错误信息会明确标注是鉴权失败、参数缺失还是格式错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:39:15