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

C# RestSharp POST请求JSON转义异常 返回storage_id无效错误

RestSharp对接Baselinker API报Invalid storage identifier错误解决

对接Baselinker平台API时,使用官方网页测试工具提交参数可返回正常响应:
接口正常响应截图
API测试入口:https://api.baselinker.com/index.php?tester

错误复现

使用如下RestSharp代码发起请求:

public async Task xdAsync()
{
    var client = new RestClient("https://api.baselinker.com/connector.php");
    string token = "my API token here";

    RestRequest request = new RestRequest();

    request.AddParameter("token", token);
    request.AddParameter("method", "addProductVariant");
    request.AddParameter("application/json","{\"storage_id\":\"bl_1\",\"product_id\":\"67564668\",\"variant_id\":1055421650,\"name\":\"42\",\"quantity\":5,\"price_brutto\":599.99,\"ean\":29193201490}",ParameterType.RequestBody);

    var response = await client.PostAsync(request);

    Console.WriteLine(response.Content);
}

接口固定返回错误:

{"status":"ERROR","error_code":"ERROR_STORAGE_ID","error_message":"Invalid storage identifier provided."}

尝试过去除JSON转义斜杠、使用@逐字字符串定义JSON等方案,均未解决问题。

作为对照,使用HttpWebRequest实现POST请求逻辑时可正常返回结果:

// 测试请求示例
var url = "https://reqbin.com/echo/post/json";

var httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.Method = "POST";

httpRequest.Accept = "application/x-www-form-urlencoded";
httpRequest.Headers["Authorization"] = "My API KEY";
httpRequest.ContentType = "application/json";
var data = @"{
                ""addProductVariant"":{ ""storage_id"":""bl_1"",
                                        ""product_id"":""67564668"",
                                        ""variant_id"":""10525421650"",
                                        ""name"":""42"",
                                        ""quantity"":""10"",
                                        ""price_brutto"":""599.99"",
                                        ""ean"":""29193201490"" }
             } ";

using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
{
    streamWriter.Write(data);
}


var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
    Console.WriteLine(result.ToString());
}

Console.WriteLine(httpResponse.StatusCode);

返回结果:

{"success":"true"}
OK

相同参数下HttpWebRequest实现可正常运行,仅RestSharp实现触发报错。

问题原因

  • 传参格式不符合接口要求:Baselinker API不接受纯JSON Body的POST请求,所有请求需使用application/x-www-form-urlencoded格式提交,其中token、method为独立表单字段,业务参数要序列化为JSON字符串后赋值给parameters表单字段。之前的写法直接把业务JSON设为RequestBody,同时单独添加token、method参数,RestSharp组装请求时会将这两个字段追加到URL查询串,服务端从表单中读不到parameters字段,无法解析出storage_id,直接返回对应错误。
  • JSON结构不匹配:对照的HttpWebRequest示例使用的是公共测试地址,其要求的参数结构和Baselinker官方接口不一致,之前提交的RestSharp请求JSON结构和接口要求不匹配,就算服务端读到Body内容也无法正确解析。

修复方案

按照Baselinker官方要求的表单格式组装RestSharp请求即可:

public async Task AddProductVariantAsync()
{
    var client = new RestClient("https://api.baselinker.com/connector.php");
    const string token = "替换为你的实际API Token";
    var request = new RestRequest(Method.Post);
    
    // 组装业务参数并序列化为JSON字符串
    var bizParams = new
    {
        storage_id = "bl_1",
        product_id = "67564668",
        variant_id = 1055421650,
        name = "42",
        quantity = 5,
        price_brutto = 599.99,
        ean = "29193201490"
    };
    var parametersJson = System.Text.Json.JsonSerializer.Serialize(bizParams);
    
    // 按接口要求添加所有表单字段
    request.AddParameter("token", token);
    request.AddParameter("method", "addProductVariant");
    request.AddParameter("parameters", parametersJson);

    var response = await client.PostAsync(request);
    Console.WriteLine(response.Content);
}

提示:不要直接照搬HttpWebRequest示例里嵌套方法名的JSON结构,对接Baselinker时直接将业务参数序列化后传给parameters字段即可,和官方网页测试工具的传参逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:21:21