TidHttp post 与 URL-Segment

TidHttp post with URL-Segment

我正在使用 TidHttp-component 对具有 URL-Segment 参数的端点执行 post,并且还在自定义 Header 中 JSON-data .在 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、

的部分截图

非常感谢任何帮助!

亲切的问候,

德克

URL-段是 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);