QHttpServerRouterRule 类

QHttpServerRouterRule 是 QHttpServerRouter 规则的基类。 更多信息...

头文件 #include <QHttpServerRouterRule>
CMakefind_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmakeQT += httpserver
自 Q6.4
状态技术预览

公共类型

公共函数

QHttpServerRouterRule(const QString &pathPattern, QHttpServerRouterRule::RouterHandler routerHandler)
QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, QHttpServerRouterRule::RouterHandler routerHandler)
~QHttpServerRouterRule()

保护函数

boolexec(const QHttpServerRequest &request, QHttpServerResponder &responder) const
boolhasValidMethods() const
虚 boolmatches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const

详细描述

使用 QHttpServerRouterRule 指定预期的请求参数

常数描述
pathQUrl::path()
HTTPmethods QHttpServerRequest::Methods
callback用户定义的响应回调

注意:这是一个低级 API,有关高级替代方案,请参阅 QHttpServer

QHttpServerRouterRule 和 QHttpServerRouter 的使用示例

template<typename ViewHandler>
void route(const char *path, const QHttpServerRequest::Methods methods, ViewHandler &&viewHandler)
{
    auto rule = std::make_unique<QHttpServerRouterRule>(
            path, methods, [this, viewHandler = std::forward<ViewHandler>(viewHandler)]
                                               (QRegularExpressionMatch &match,
                                                const QHttpServerRequest &request,
                                                QHttpServerResponder &&responder) mutable {
        auto boundViewHandler = router.bindCaptured<ViewHandler>(
                std::move(viewHandler), match);
        // call viewHandler
        boundViewHandler();
    });

    // QHttpServerRouter
    router.addRule<ViewHandler>(std::move(rule));
}

// Valid:
route("/user/", [] (qint64 id) { } );                            // "/user/1"
                                                                 // "/user/3"
                                                                 //
route("/user/<arg>/history", [] (qint64 id) { } );               // "/user/1/history"
                                                                 // "/user/2/history"
                                                                 //
route("/user/<arg>/history/", [] (qint64 id, qint64 page) { } ); // "/user/1/history/1"
                                                                 // "/user/2/history/2"

// Invalid:
route("/user/<arg>", [] () { } );  // ERROR: path pattern has <arg>, but ViewHandler does not have any arguments
route("/user/\\d+", [] () { } );   // ERROR: path pattern does not support manual regexp

注意:路径模式中的正则表达式不受支持,但可以使用 QHttpServerRouter::addConverter() 注册(将 "<val>" 的使用与特定类型匹配)。

成员类型文档

[alias] QHttpServerRouterRule::RouterHandler

类型别名 std::function<void(const QRegularExpressionMatch &,const QHttpServerRequest &, QHttpServerResponder &&)>

成员函数文档

[explicit] QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, QHttpServerRouterRule::RouterHandler routerHandler)

使用路径模式 pathPattern 和路由处理程序 routerHandler 构造规则。

默认情况下,该规则接受所有 HTTP 方法。

另请参阅:QHttpServerRequest::Methods.

[明确说明] QHttpServerRouterRule::QHttpServerRouterRule(const QString &pathPattern, const QHttpServerRequest::Methods methods, QHttpServerRouterRule::RouterHandler routerHandler)

构造一个具有路径模式 pathPattern、方法 methods 和路由处理器 routerHandler 的规则。

该规则接受所有可用的 HTTP 方法的任何组合。

另请参阅:QHttpServerRequest::Methods.

[虚函数 noexcept] QHttpServerRouterRule::~QHttpServerRouterRule()

销毁一个 QHttpServerRouterRule

[保护成员] bool QHttpServerRouterRule::exec(const QHttpServerRequest &request, QHttpServerResponder &responder) const

如果匹配,则对此规则执行给定的 request

QHttpServerRouter 接收到新的请求时,会调用此函数。如果给定的 request 与此规则匹配,则此函数通过给定的 responder 返回响应并返回 true。否则返回 false

[保护成员] bool QHttpServerRouterRule::hasValidMethods() const

如果方法有效,则返回 true

[虚保护成员] bool QHttpServerRouterRule::matches(const QHttpServerRequest &request, QRegularExpressionMatch *match) const

确定给定的 request 是否匹配此规则。

exec() 调用此虚拟函数来检查 request 是否与此规则匹配。如果找到匹配项,它将存储在指向 match(不能为 nullptr)的指针所指向的对象中,并返回 true。否则返回 false

© 2024 Qt 公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应的标志是芬兰以及/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。