C#使用HttpFactory调用HTTPS API路径拼接错误与POST请求400问题求助
问题1:GET请求路径拼接错误修复
你出现拼接错误的核心原因是手动拼接URL参数时变量携带多余符号、符号位置错误,避免此类问题最稳妥的方案是使用专用的查询参数拼接工具类,不要手动用String.Format拼接:
- 先确认基础路径变量
urlGetHistoryTrades的值为spot/history/trade,末尾不要带多余斜杠 - 改用
QueryHelpers(需引用Microsoft.AspNetCore.WebUtilities命名空间)拼接查询参数,修正后代码如下:
using Microsoft.AspNetCore.WebUtilities; public IList<HistoryTrades> HistoryTrades(string path, string VALUE) { var queryParams = new Dictionary<string, string> { {"symbol", VALUE} }; var fullRequestUrl = QueryHelpers.AddQueryString(urlGetHistoryTrades, queryParams); return _restService.GetRequest<IList<HistoryTrades>>(fullRequestUrl).Result; }
这个工具类会自动处理参数编码、问号和分隔符的位置,不会再出现多余斜杠、问号错位的问题。
问题2:POST请求返回400错误修复
你这个问题的根本原因是参数传递位置错误:
你提供的curl示例里,参数是通过-d参数放在请求体中传输,请求格式为application/x-www-form-urlencoded,而你把参数直接拼接在URL后面属于GET请求的查询参数传参方式,接口无法从请求体中读取到对应参数,所以返回400错误。
修正方案为把参数放到POST请求的请求体中传输,示例代码如下:
using System.Net.Http.Headers; // 构造表单参数 var postData = new Dictionary<string, string> { {"symbol", "VALUE"}, {"side", "sell"}, {"type", "limit"}, {"time_in_force", "GTC"}, {"quantity", "10"}, {"price", "10"} }; var content = new FormUrlEncodedContent(postData); // 配置请求头 _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "你的Authorization秘钥"); // 发送POST请求 var response = await _httpClient.PostAsync("https://api.server.com/api/3/spot/order", content);
内容的提问来源于stack exchange,提问作者Faggiano
相关产品推荐
相关产品推荐

