根据查询的路由使用不同的请求解析器

问题描述 投票:1回答:1

我正在使用boost野兽实现一个迷你http服务器。服务器有两个不同的路由POST / upload / ...另一个是POST / info。第一个用于上传一些大文件,另一个用于hadling json对象。为了保持性能尽可能高,我尝试使用合适的解析器file_body和string_body / dynamic_body解析每个路由。我希望可以这样做:

http::async_read_header(
            socket_,
            buffer_,
            request_,
            [self](beast::error_code ec, std::size_t)
            {
                if (!ec)
                    self->request_.body().data();
            });

但似乎不可能。

有没有办法根据标题信息使用不同的请求主体?

提前谢谢了

http c++11 boost-asio boost-beast
1个回答
2
投票

这应该在文档中介绍,但是这里是如何做到的:使用类型beast::request_parser<beast::empty_body>首先读取标题,然后根据您移动的标题的内容 - 构建一个新的解析器,使用您想要的正文类型。例:

// Deferred body type commitment
request_parser<empty_body> req0;
...
request_parser<string_body> req{std::move(req0)};

您可以在此处阅读有关切换体型的完整文档:https://www.boost.org/doc/libs/1_69_0/libs/beast/doc/html/beast/ref/boost__beast__http__parser/parser/overload5.html

© www.soinside.com 2019 - 2024. All rights reserved.