0

我有https://api.gm-system.net/api/authenticate/searchStaffs/searchText返回列表人员的 api。

cpprestsdk这是我使用c++访问此 api的代码。

auto fileStream = std::make_shared<ostream>();

    // Open stream to output file.
    pplx::task<void> requestTask = fstream::open_ostream(U("results.html")).then([=](ostream outFile)
    {
        *fileStream = outFile;

        // Create http_client to send the request.
        http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/michael"));


        return client.request(methods::GET);
    })

        // Handle response headers arriving.
        .then([=](http_response response)
    {
       ......
    }

这个如果还好。但是,我只是手动输入"michael" searchText.

我怎样才能让它接受任何类似这样的 searchText 。

void MyTest(std::string searchText)
{
..... code here

// Create http_client to send the request.
http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/" + searchText));

return client.request(methods::GET);

..... code here
}

这个我已经试过了,不行。“U”宏有一些问题。来自https://github.com/Microsoft/cpprestsdk/wiki/FAQ的描述U macro是:

The 'U' macro can be used to create a string literal of the platform type. If you are using a library causing conflicts with the 'U' macro, for example Boost.Iostreams it can be turned off by defining the macro '_TURN_OFF_PLATFORM_STRING' before including the C++ REST SDK header files.

如果我将光标指向U,则错误显示:

no operator "+" matches these operands operand types are; const wchar_t[57] + const std::string

我希望有人能帮助我。谢谢。

4

1 回答 1

2

自从

C++ REST SDK 使用不同的字符串类型,具体取决于目标平台。例如,对于 Windows 平台,utility::string_t 是使用 UTF-16 的 std::wstring,在 Linux 上是使用 UTF-8 的 std::string。

您应该在utility::string_t需要时使用该类,并且不要将其与std::stringor混合const char *(并U在需要文字时使用宏)。

换句话说,您的函数应该接受 anutility::string_t作为其searchText参数(而不是std::string):

void MyTest(utility::string_t searchText)
{
    http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/") + searchText);

    // etc ...

}

像这样使用它:

int main()
{

    utility::string_t searchText = U("Michael");
    MyTest(searchText);

    return 0;
}

如果必须从特定于平台的上下文中调用函数,则std可以将相应的类型用作传入的参数类型(即std::wstring在 Windows 上使用):

std::wstring searchText = L"Michael";
MyTest(searchText);
于 2018-04-17T06:57:18.223 回答