Je rencontre beaucoup de problèmes lors de l'exécution d'un simple post de données vers un service Web API C# WEB utilisant Delphi (J'ai Embarcadero® Delphi 10.1 Berlin Version 24.0.22858.6822)Impossible de publier des données dans la méthode de service API Web à l'aide de Delphi
Mon contrôleur de service API Web est illustré ci-dessous
Comme vous pouvez le voir, j'ai une classe InvoiceBreakdownParameters qui contient les paramètres requis pour ma méthode.
L'idée est pour cet objet à créer comme une chaîne JSON dans mon application Delphi et cela est ensuite transmis à la méthode dans le contrôleur
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;
}
}
}
Le code ci-dessous montre comment je posterai au service 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;
Chaque fois que je tente d'appeler ce code je reçois
HTTP/1.1 500 Internal Server Error.
Cela devrait être si simple faire et pourtant il m'a gaspillé des heures!
J'ai essayé avec les deux GetBreakdownForSessionObject et GetBreakdownForSessionObject/
Quelqu'un peut-il voir quelque chose que j'ai manqué?
Paul
PS J'ai édité le JSON être Delphi amical et je reçois toujours la même erreur. C'est vraiment frustrant! N'y a-t-il aucun moyen d'obtenir plus d'informations? Je ne peux même pas obtenir quelque chose de Fiddler!
Delphi n'utilise pas les caractères d'échappement dans une chaîne, les barres obliques sont en fait envoyées au service web ... – whosrdaddy
J'ai corrigé le JSON et j'ai la même erreur – Paul
Vous pourriez essayer d'ajouter un proxy au composant Indy. 127.0.0.1 et le port 8888 (vous pourriez aussi avoir besoin de le configurer dans fiddler, j'oublie). Cela devrait passer par le violoneux pour que vous puissiez au moins voir ce que vous envoyez. – FLDelphi