2015-01-05 129 views
1

我需要调用ASP web api并从delphi 2007返回JSON。我可以在TR StudioClient的RAD Studio XE 5中执行此操作。我试图把它放在一个dll中,以便我可以从我的delphi 2007程序中调用它。但没有成功。我如何使用delphi 2007来做到这一点?如何调用ASP web api并从delphi 2007返回JSON

编辑

这里就是我想在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(零);”当放入一个DLL。

+0

你究竟做了什么?什么不适合你?如果你需要帮助,你需要提供具体的细节。 –

+1

Indy应该工作得很好 - 您只需要使用Superobjects Lib或类似工具解析JSON即可。在表单上放置TIDHTTP组件或将其实例化 - > str:= TIDHTTP.get(** resturl ***) –

+0

@Remy对不起,对于迟到的回复。我用示例代码更新了我的问题。 – Reynaldi

回答

1

我没有找到德尔福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中工作。