C ++ Builder + RESTRequest + Dreamfactory - 无法传递session_id HTTPHeader

时间:2015-03-11 10:17:21

标签: c++ rest http-headers c++builder builder

使用C ++ Builder XE7的试用版和REST组件。我想我没有正确地将HTTPHeaders传递给Dreamfactory v1.8。我能够通过POST请求进行身份验证,该请求需要将电子邮件和密码作为Body属性中的JSON对象传递。我可以获得后续调用所需的session_id。

RESTDebugger工作得很好并且也从表中获取数据 - 但我无法将其转换为C ++中的应用程序。这是我调用登录资源后触发的事件的代码

enter code here
void __fastcall TForm1::RESTRequest1AfterExecute(TCustomRESTRequest *Sender)
    {
    Label1->Text = RESTResponse1->JSONText;

    TJSONObject *JSON = (TJSONObject*)TJSONObject::ParseJSONValue(RESTResponse1->JSONText);
    TJSONPair *pair = JSON->Get("session_id");
    sSessionID = pair->JsonValue->ToString();
    RESTRequest2->Resource = "mssql_utilities/leaveCategory?order=categoryname";
    RESTRequest2->Method = rmGET;
    RESTRequest2->AddParameter("X-DreamFactory-Application-Name", "NDTVi", pkHTTPHEADER);
    RESTRequest2->AddParameter("X-DreamFactory-Session-Token", sSessionID, pkHTTPHEADER);
    RESTRequest2->AddParameter()
    RESTRequest2->Execute();
}

我做错了什么?我怀疑RESTRequest2-> AddParameter方法不正确。 RESTRequest2-> Execute()返回HTTP 500服务器错误。

我在Windows 8.1上工作,无法让Fiddler 4工作 - 所以无法看到传递给服务器的内容。

拜托,请帮忙。需要让这个工作,所以我可以购买许可证并开始工作。

非常感谢

艾尔

1 个答案:

答案 0 :(得分:0)

知道了!原来我从第一次调用传递了一个不正确的会话ID参数值。这段代码有效。我使用过两个RESTRequest对象。一个用Dreamfactory进行身份验证并返回session_id,RESTRequest2用于获取数据 - 会话ID作为HTTP头传递给Dreamfactory。

        TJSONObject *JSON = (TJSONObject*)TJSONObject::ParseJSONValue(RESTResponse1->JSONText);
        TJSONPair *pair = JSON->Get("session_id");
        sSessionID = pair->Value();
        RESTRequest2->Resource = "mssql_utilities/leavecategory";
        RESTRequest2->Params->AddItem("X-DreamFactory-Application-Name", "myApp", pkHTTPHEADER);
        RESTRequest2->Params->AddItem("X-DreamFactory-Session-Token", sSessionID, pkHTTPHEADER);
        RESTRequest2->Execute();