我在控制台应用程序中使用 Grapevine 服务器。 通过 get work 完美打电话。
现在我想通过 post 请求将序列化的订单对象传递到端点,但我收到以下错误消息:
发送了0个请求内容字节,但Content-Length承诺了538
服务器代码(空体):
[RestResource]
public class OrderService {
public OrderService() { }
[RestRoute(HttpMethod = HttpMethod.POST, PathInfo = "/distribution/saveorder")]
public IHttpContext SaveOrder(IHttpContext context) {
return context;
}
}
客户端代码:
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);
request.ContentLength = request.Payload.Length;
var response = client.Execute(request);
}
错误消息非常清楚,但是在哪里/如何输入内容长度 - 或者我是否错误地使用了有效负载?
作为 Grapevine 的维护者,我建议放弃使用
RestRequest
类,转而使用 FluentHttpClient,我也是该类的维护者。新版本的 Grapevine 根本不包含 RestRequest
类。
使用提供的信息向您的端点发送请求将如下所示:
public async Task Test()
{
// Create your order object
var order = new Order();
var client = new HttpClient { BaseAddress = new Uri("http://localhost:8120") };
var response = await client.UsingRoute("/distribution/saveorder")
.WithJsonContent(order)
.PostAsync();
if (response.IsSuccessStatusCode)
{
// Do something with the response
}
else
{
// Interrogate the response for the error
}
}