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

Grapevine控制台应用POST请求报错:Content-Length与实际内容不匹配

问题解决:Grapevine POST请求Content-Length不匹配错误

错误提示Sent 0 request content bytes, but Content-Length promised 538的核心原因是:你手动设置的ContentLength是JSON字符串的字符数,但HTTP协议要求Content-Length是请求体的字节数,二者不匹配;同时Grapevine的RestRequest会自动处理ContentLength的计算,手动设置反而会导致冲突。

修正方案

直接移除手动设置ContentLength的代码,让Grapevine自动根据Payload内容计算正确的字节长度。

修正后的客户端代码:

public void Test() {
    RestClient client = new RestClient();
    client.Host = "localhost";
    client.Port = 8120;
    RestRequest request = new RestRequest("/distribution/saveorder");
    request.HttpMethod = HttpMethod.POST;
    request.ContentType = ContentType.JSON;

    Order order = new ();
    order.Buyer.Number = "4711";
    OrderItem item = new ();
    item.Article.Number = "1111111";
    item.Quantity = 5;
    order.Items.Add(item);
    item = new ();
    item.Article.Number = "2222222";
    item.Quantity = 20;
 
    request.Payload = JsonSerializer.Serialize(order);

    // 移除手动设置ContentLength的代码,Grapevine会自动计算并设置
    var response = client.Execute(request);
}

额外说明

如果需要手动控制编码(比如非UTF-8编码),可以将JSON字符串转为对应编码的字节数组再赋值给Payload,同样不需要手动设置ContentLength:

var json = JsonSerializer.Serialize(order);
var bytes = Encoding.UTF8.GetBytes(json); // 可替换为其他编码
request.Payload = bytes;

服务器端读取请求内容(补充)

如果需要在服务器端处理传入的Order对象,可以修改SaveOrder方法:

[RestResource]
public class OrderService {
    public OrderService() { }

    [RestRoute(HttpMethod = HttpMethod.POST, PathInfo = "/distribution/saveorder")]
    public IHttpContext SaveOrder(IHttpContext context) {
        // 读取请求体JSON并反序列化为Order对象
        var jsonContent = context.Request.Content.ReadAsStringAsync().Result;
        var order = JsonSerializer.Deserialize<Order>(jsonContent);
        
        // 执行你的业务逻辑...
        
        return context;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

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