C++Rest SDK 将长数据类型传递到请求正文中导致 400 Bad Request
C++Rest SDK Passing a long data type into request body results in 400 Bad Request
我的 Swagger 文档定义了一个预期在请求中发送的长数据类型,例如:
size:
type: integer
format: int64
description: 'Some size'
我在 C++ 中使用以下代码创建请求:
web::json::value postData = web::json::value::object();
如果我在正文中传递一个硬编码值(即 50 左右),我会得到 200 OK 响应,这很好
postData[L"size"] = web::json::value::number(50);
但是,如果我将此值作为 long 或 int64_t 数据类型变量传递,如下所示,我会收到 400 Bad Request
long size = 50; //or int64_t, it results with same error
postData[L"size"] = web::json::value::number(size);
问题是我使用 MockLabs 创建模拟调用。
因此,在那里我将 POST 请求主体定义为:
{ "size":1 }
因此,如果我传入的 POST 请求的值不同于 1(即 50),我将得到 400 Bad Request;否则,我会得到 200 OK。如果你保留这个POST请求体,那么你只能发送size=1,其他的都会return 400 Bad Request.
因为我硬编码 1,所以我得到 200 OK
但是当我在我的代码中使用一个变量(不同于 1)时,我会得到 400 Bad Request。
解决方法:
只需在您的模拟服务器(我使用 MockLabs)中删除 POST 请求主体定义并将其留空。然后它将接受任何带有正文的 POST 请求(即 { "size":1 }
或 { "size":450 }
,或 { "size":8 }
,或您想要的任何其他整数),并将以 200 OK 响应。
我的 Swagger 文档定义了一个预期在请求中发送的长数据类型,例如:
size:
type: integer
format: int64
description: 'Some size'
我在 C++ 中使用以下代码创建请求:
web::json::value postData = web::json::value::object();
如果我在正文中传递一个硬编码值(即 50 左右),我会得到 200 OK 响应,这很好
postData[L"size"] = web::json::value::number(50);
但是,如果我将此值作为 long 或 int64_t 数据类型变量传递,如下所示,我会收到 400 Bad Request
long size = 50; //or int64_t, it results with same error
postData[L"size"] = web::json::value::number(size);
问题是我使用 MockLabs 创建模拟调用。 因此,在那里我将 POST 请求主体定义为:
{ "size":1 }
因此,如果我传入的 POST 请求的值不同于 1(即 50),我将得到 400 Bad Request;否则,我会得到 200 OK。如果你保留这个POST请求体,那么你只能发送size=1,其他的都会return 400 Bad Request.
因为我硬编码 1,所以我得到 200 OK 但是当我在我的代码中使用一个变量(不同于 1)时,我会得到 400 Bad Request。
解决方法:
只需在您的模拟服务器(我使用 MockLabs)中删除 POST 请求主体定义并将其留空。然后它将接受任何带有正文的 POST 请求(即 { "size":1 }
或 { "size":450 }
,或 { "size":8 }
,或您想要的任何其他整数),并将以 200 OK 响应。