如何在Restinio中使用POST处理程序?

时间:2019-09-16 09:20:32

标签: c++ windows rest http post

我想使用Windows上的c ++ Restinio在服务器端处理POST请求。我没有找到任何有用的示例,并且语法很难理解。请为我提供该项目的基本示例代码。

1 个答案:

答案 0 :(得分:1)

处理HTTP POST请求有两个方面。

第一个也是最简单的一个是为请求指定处理程序。如果您使用express-router,则为特定路径设置HTTP POST处理程序非常简单:

router->http_post("/some/your/path",
   [](const auto & req, const auto & params) {
      ... // Code of your request handler here.
   });

但是,如果您不使用express-router,则必须手动检查传入请求的方法:

auto your_handler(const restinio::request_handle_t & req) {
   if(restinio::http_method_post() == req->header().method()) {
      ... // Code for handling HTTP POST request.
   }
   ...
}

第二个也是最困难的方面是处理POST的正文(可以通过req->body()方法获得该正文)。在那里,您必须检查Content-Type HTTP标头并做出适当的反应:

  • 如果Content-Typeapplication/x-www-form-urlencoded,则可以使用RESTinio的parse_query帮助函数将主体拆分为(键,值)对的列表。 Here,您会找到一个有关如何完成此操作的示例。
  • 如果Content-Typemultipart/form-data,则必须处理多部分正文。在那种情况下,可以使用RESTinio的助手,例如detect_boundary_for_multipart_body + split_multipart_bodyenumerate_parts。另请参见content-disposition帮助器。
  • 如果Content-Type包含一些特定于应用程序的值(例如application/json),则您必须以特定于应用程序的方式处理POST正文的内容(例如使用JSON解析器从正文反序列化数据)。您可以查看restinio-crud-demo来了解这种情况(采用非常简单的形式,因为它是一个演示而不是生产代码)。