Delphiを使用してC#Web API Webサービスにデータの簡単なポストを実行する際に多くの問題が発生しています(Embarcadero®Delphi 10.1 Berlinバージョン24.0.22858.6822)Delphiを使用してWeb APIサービスメソッドにデータを投稿できません
私の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私はDelphiが友好的であるためにJSONを編集していると私はまだ同じエラーを取得します。これは本当にイライラしています!より多くの情報を得る方法はありませんか?私はフィドラーから何も得られない!
Delphiは文字列内でエスケープ文字を使用しません。スラッシュは実際にWebサービスに送信されます。 – whosrdaddy
JSONを修正して同じエラーが発生しました – Paul
Indyコンポーネントにプロキシを追加することがあります。 127.0.0。1とポート8888(あなたはフィドラーでそれを設定する必要があるかもしれませんが、私は忘れてしまいます)。それはあなたが少なくともあなたが送信していることを見ることができるように、それはバイダリを介して取得する必要があります。 – FLDelphi