如何从 delphi 2007 调用 ASP 网络 api 和 return JSON
How to call an ASP web api and return JSON from delphi 2007
我需要从 delphi 2007 调用 ASP 网络 api 和 return JSON。我可以在 RAD 中完成Studio XE 5 与 TRestClient。我试图将它放在一个 dll 中,以便我可以从我的 delphi 2007 程序中调用它。但没有成功。我如何使用 delphi 2007 执行此操作?
编辑
这是我在 delphi xe 5
中尝试做的事情
class function TSampleApp.Hello(AModel: TModel): Integer;
var
aRestClient: TRESTClient;
aRestRequest: TRESTRequest;
aRestResponse: TRESTResponse;
aParam: TRESTRequestParameter;
jValue: TJSONValue;
jObject: TJSONObject;
begin
Result := -1;
aRestClient := TRESTClient.Create(nil);
try
aRestResponse := TRESTResponse.Create(nil);
try
aRestRequest := TRESTRequest.Create(nil);
try
try
aRestClient.BaseURL := 'http://localhost:49272/api/test';
aRestRequest.Client := aRestClient;
aRestRequest.Response := aRestResponse;
aRestRequest.Method := rmPOST;
aRestRequest.Resource := 'hello';
aParam := aRestRequest.Params.AddItem;
aParam.Kind := pkREQUESTBODY;
aParam.name := 'helloData';
aParam.Value := TJson.ObjectToJsonString(AModel);
aRestRequest.Execute;
jValue := aRestResponse.JSONValue;
jObject := TJSONObject.ParseJSONValue(jValue.ToString) as TJSONObject;
Result := StrToIntDef((jObject.Get('status').JsonValue as TJSONString).Value, -1);
finally
FreeAndNil(jObject);
FreeAndNil(jValue);
end;
finally
FreeAndNil(aRestRequest);
end;
finally
FreeAndNil(aRestResponse);
end;
finally
FreeAndNil(aRestClient);
end;
end;
此代码在 win32 应用程序中运行完美,但在 "aRestResponse := TRESTResponse.Create(nil);" 放入 dll 时失败。
我没有找到 delphi 2007 的休息客户端解决方案。我最终为此使用了 indy。
我用 LkJson 来处理 json.
class function TSampleApp.Hello(AModel: TModel): Integer;
var
idHttp: TIdHTTP;
url, sjsonresponse, sjsonrequest: string;
strRequest: TStrings;
jsonObj: TlkJSONobject;
begin
Result := -1;
url := 'http://localhost:49272/api/test/hello';
idHttp := TIdHTTP.Create;
try
jsonObj := TlkJSONobject.Create;
try
//populate
jsonObj.Add('param1', AModel.param1);
jsonObj.Add('param2', AModel.param2);
sjsonrequest := TlkJSON.GenerateText(jsonObj);
finally
FreeAndNil(jsonObj);
end;
idHttp.Request.Accept := 'application/json';
strRequest := TStringList.Create;
try
strRequest.Values['helloData'] := sjsonrequest;
sjsonresponse := idHttp.Post(url, strRequest);
finally
FreeAndNil(strRequest);
end;
jsonObj := TlkJSON.ParseText(sjsonresponse) as TlkJSONobject;
try
Result := StrToIntDef(VarToStr((jsonObj.Field['status'] as TlkJSONnumber).Value), -1);
finally
FreeAndNil(jsonObj);
end;
finally
idHttp.Free;
end;
end;
这段代码也可以在 dll 中运行。
我需要从 delphi 2007 调用 ASP 网络 api 和 return JSON。我可以在 RAD 中完成Studio XE 5 与 TRestClient。我试图将它放在一个 dll 中,以便我可以从我的 delphi 2007 程序中调用它。但没有成功。我如何使用 delphi 2007 执行此操作?
编辑
这是我在 delphi xe 5
中尝试做的事情class function TSampleApp.Hello(AModel: TModel): Integer;
var
aRestClient: TRESTClient;
aRestRequest: TRESTRequest;
aRestResponse: TRESTResponse;
aParam: TRESTRequestParameter;
jValue: TJSONValue;
jObject: TJSONObject;
begin
Result := -1;
aRestClient := TRESTClient.Create(nil);
try
aRestResponse := TRESTResponse.Create(nil);
try
aRestRequest := TRESTRequest.Create(nil);
try
try
aRestClient.BaseURL := 'http://localhost:49272/api/test';
aRestRequest.Client := aRestClient;
aRestRequest.Response := aRestResponse;
aRestRequest.Method := rmPOST;
aRestRequest.Resource := 'hello';
aParam := aRestRequest.Params.AddItem;
aParam.Kind := pkREQUESTBODY;
aParam.name := 'helloData';
aParam.Value := TJson.ObjectToJsonString(AModel);
aRestRequest.Execute;
jValue := aRestResponse.JSONValue;
jObject := TJSONObject.ParseJSONValue(jValue.ToString) as TJSONObject;
Result := StrToIntDef((jObject.Get('status').JsonValue as TJSONString).Value, -1);
finally
FreeAndNil(jObject);
FreeAndNil(jValue);
end;
finally
FreeAndNil(aRestRequest);
end;
finally
FreeAndNil(aRestResponse);
end;
finally
FreeAndNil(aRestClient);
end;
end;
此代码在 win32 应用程序中运行完美,但在 "aRestResponse := TRESTResponse.Create(nil);" 放入 dll 时失败。
我没有找到 delphi 2007 的休息客户端解决方案。我最终为此使用了 indy。 我用 LkJson 来处理 json.
class function TSampleApp.Hello(AModel: TModel): Integer;
var
idHttp: TIdHTTP;
url, sjsonresponse, sjsonrequest: string;
strRequest: TStrings;
jsonObj: TlkJSONobject;
begin
Result := -1;
url := 'http://localhost:49272/api/test/hello';
idHttp := TIdHTTP.Create;
try
jsonObj := TlkJSONobject.Create;
try
//populate
jsonObj.Add('param1', AModel.param1);
jsonObj.Add('param2', AModel.param2);
sjsonrequest := TlkJSON.GenerateText(jsonObj);
finally
FreeAndNil(jsonObj);
end;
idHttp.Request.Accept := 'application/json';
strRequest := TStringList.Create;
try
strRequest.Values['helloData'] := sjsonrequest;
sjsonresponse := idHttp.Post(url, strRequest);
finally
FreeAndNil(strRequest);
end;
jsonObj := TlkJSON.ParseText(sjsonresponse) as TlkJSONobject;
try
Result := StrToIntDef(VarToStr((jsonObj.Field['status'] as TlkJSONnumber).Value), -1);
finally
FreeAndNil(jsonObj);
end;
finally
idHttp.Free;
end;
end;
这段代码也可以在 dll 中运行。