【问题标题】:TidHttp post with URL-Segment带有 URL 段的 TidHttp 帖子
【发布时间】:2020-04-27 11:51:33
【问题描述】:

我正在使用 TidHttp 组件向具有 URL-Segment 参数以及自定义标头中的 JSON 数据的端点进行发布。在 REST-Debugger 中一切正常,但我不知道如何在代码中添加参数。 本质上,我的代码如下所示:


IdHTTP1.Request.ContentType := 'application/json' ;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization',Token );
IdHTTP1.Request.CustomHeaders.AddValue('X-Api-Key',APIKEY );

//deliveryOrderId is a URL-SEGMENt, HOW ??
// this does not work ?
IdHTTP1.Request.CustomHeaders.AddValue('deliveryOrderId', deliveryOrderID );

 url := ‘https://api.staging.floriday.io/apps/delivery-orders/{deliveryOrderId}/auction’

streamParameters := TStringStream.Create( makeDeliveryOrderJSON ) ;

IdHTTP1.Post( url , streamParameters) ;  <---- BAD REQUEST

下面是 REST-Debugger 的一些截图,

非常感谢任何帮助!

亲切的问候,

德克。

【问题讨论】:

  • TIdHTTP 不支持命名的 URL 段参数。另一方面,TRestClient 是 REST 调试器在幕后使用的。如果你坚持使用 Indy,你必须自己管理 URL。

标签: json rest delphi post indy


【解决方案1】:

URL-Segments 是 Embarcadero 的 REST 框架的一个功能,它们不是实际 HTTP 请求本身的一部分,也不适用于其他 HTTP 库,例如 Indy 的 TIdHTTP。您正在寻找的是 URL 本身中的简单字符串替换,例如:

IdHTTP1.Request.ContentType := 'application/json' ;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token);
IdHTTP1.Request.CustomHeaders.AddValue('X-Api-Key', APIKEY);

url := 'https://api.staging.floriday.io/apps/delivery-orders/{deliveryOrderId}/auction';
url := StringReplace(url, '{deliveryOrderId}', deliveryOrderID);
// or simply:
// url := 'https://api.staging.floriday.io/apps/delivery-orders/' + deliveryOrderID + '/auction';

streamParameters := TStringStream.Create(makeDeliveryOrderJSON);

IdHTTP1.Post(url, streamParameters);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多