使用Delphi(我有Embarcadero®Delphi 10.1 Berlin版本24.0.22858.6822)无法使用Delphi将数据发布到Web API服务方法
将数据简单地发布到C#WEB API Web服务时遇到了很多问题我的Web API服务控制器如下所示
正如您所见,我有一个InvoiceBreakdownParameters类,其中包含我的方法所需的参数。
的想法是此对象为在我的Delphi应用程序JSON字符串被创建,然后这个被传递给方法在控制器
namespace STC.MicroServices.WebAPI.Controllers
{
using System.Web.Http;
public class InvoiceBreakdownParameters
{
public string SessionID { get; set; }
public int CustomerID { get; }
}
[RoutePrefix("api/CostCalculation")]
public class CostCalculationController : ApiController
{
[System.Web.Http.AcceptVerbs("POST")]
public string GetBreakdownForSessionObject(InvoiceBreakdownParameters parameters)
{
return "Data Obtained With parameters: " + parameters.SessionID + "CustomerID : " + parameters.CustomerID;
}
}
}
下面的代码显示了如何发布到Web服务
var
HTTP: TIdHTTP;
RequestBody: TStream;
ResponseBody: string;
begin
HTTP := TIdHTTP.Create;
try
RequestBody := TStringStream.Create('{"SessionID":"sessionID","CustomerID":321,"StartDate":"02-01-2017","EndDate": "29-01-2017","MeterID":105,"InvoiceID":-282,"InvoiceNumber":"104637803"}',
TEncoding.UTF8);
HTTP.Request.ContentType := 'application/json';
ResponseBody := HTTP.Post('http://127.0.0.1:56638/api/CostCalculation/GetBreakdownForSessionObject/',
RequestBody);
memo1.Text := ResponseBody;
memo1.Text := memo1.Text + HTTP.ResponseText;
finally
RequestBody.Free;
HTTP.Free;
end;
end;
每当我尝试把这个代码,我得到
HTTP/1.1 500内部服务器错误。
这应该是如此简单,但它浪费了我的时间!
我有两个GetBreakdownForSessionObject和GetBreakdownForSessionObject试图/
任何人都可以看到一些我错过了什么?
保罗
PS我已经编辑了JSON是德尔福友好,我仍然得到同样的错误。这真令人沮丧!没有办法获得更多信息吗?我甚至不能从小提琴手那里得到任何东西!然而
'{\"SessionID\":\"sessionID\",\"CustomerID\":1}"'
,您正在使用转义字符在此字符串:
Delphi不在字符串中使用转义字符,斜杠实际上被发送到webservice ... – whosrdaddy
我已更正JSON并获得相同的错误 – Paul
您可以尝试向Indy组件添加代理。 127.0.0。1和端口8888(你可能还需要在提琴手中设置它,我忘记了)。这应该通过小提琴手,所以你至少可以看到你发送的东西。 – FLDelphi