QHttpServerRouter Class
提供用于将路径绑定到ViewHandler 的功能。更多内容...
| 头文件: | #include <QHttpServerRouter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS HttpServer) target_link_libraries(mytarget PRIVATE Qt6::HttpServer) |
| qmake: | QT += httpserver |
| 自: | Qt 6.4 |
公共函数
| QHttpServerRouter(QAbstractHttpServer *server) | |
| ~QHttpServerRouter() | |
| bool | addConverter(QAnyStringView regexp) |
| void | addConverter(QMetaType metaType, QAnyStringView regexp) |
| QHttpServerRouterRule * | addRule(std::unique_ptr<QHttpServerRouterRule> rule) |
| void | clearConverters() |
| QHash<QMetaType, QString> | converters() && |
| const QHash<QMetaType, QString> & | converters() const & |
| bool | handleRequest(const QHttpServerRequest &request, QHttpServerResponder &responder) const |
| void | removeConverter(QMetaType metaType) |
详细说明
QHttpServerRouter 是一个基于规则的系统,用于将 HTTP 请求路由到相应的处理程序。您可以添加 `QHttpServerRouterRule ` 实例,这些实例用于定义请求路径及其对应的处理程序。
路由中的可变部分可以通过在请求路径中使用占位符("<arg>" )来指定,但路径末尾无需使用占位符。处理程序会将匹配到的值作为QRegularExpressionMatch 接收。参数可以是任何支持converter 的类型。可通过QHttpServerRouterRule::bindCaptured()简化处理程序的创建。
注意:QHttpServerRouter实例 不得通过其规则进行修改。
注意:这是一个 用于 HTTP 服务器的低级路由 API。
最简单的示例:
autopageView= [](constquint64 page) {
qDebug() << "page" << page;
};
usingViewHandler=decltype(pageView);
QHttpServerRouter router;
// 为请求 "/page/<number>" 注册回调函数 pageView
// 例如:"/page/10"、"/page/15"
router.addRule<ViewHandler>(
newQHttpServerRouterRule("/page/", [=](QRegularExpressionMatch&match,
constQHttpServerRequest&,
QHttpServerResponder&&) {
autoboundView=QHttpServerRouterRule::bindCaptured(pageView,match);
// 调用 pageView
boundView();
}));成员函数文档
QHttpServerRouter::QHttpServerRouter(QAbstractHttpServer *server)
创建一个带有默认转换器的 QHttpServerRouter 对象。
另请参阅 converters 。
[noexcept] QHttpServerRouter::~QHttpServerRouter()
销毁一个QHttpServerRouter 。
template <typename Type> bool QHttpServerRouter::addConverter(QAnyStringView regexp)
为Type添加一个新的转换器,该转换器可使用regexp 进行解析,若解析成功则返回true ,否则返回false 。若解析成功,则该已注册的类型可作为QHttpServerRouterRule 中处理程序的参数使用。正则表达式将用于解析规则的路径模式。
如果已经存在类型为Type 的转换器,则该转换器的正则表达式将被替换为regexp 。
自定义转换器可以通过QMetaType 系统扩展现有的类型转换功能。
定义一个带有 `QString ` 构造函数的类:
struct CustomArg {
int data = 10;
CustomArg() {} ;
CustomArg(const QString &urlArg) : data(urlArg.toInt()) {}
};若要将自定义类型与HTTP server 配合使用,请通过此函数进行注册,并使用新类型定义route 处理程序:
server.router()->addConverter<CustomArg>(u"[+-]?\\d+");
server.route("/customTest/<arg>", [] (const CustomArg custom) { return QString::number(custom.data); });另请参阅 converters 和clearConverters 。
void QHttpServerRouter::addConverter(QMetaType metaType, QAnyStringView regexp)
为metaType 添加了一个新的转换器,该转换器可通过regexp 进行解析。为metaType 提供转换器后,即可在QHttpServerRouterRule 的路径模式中使用该类型。该正则表达式用于从路径模式中解析metaType 类型的参数。
如果已经存在类型为metaType 的转换器,则该转换器的正则表达式将被替换为regexp 。
另请参阅 converters 和clearConverters 。
template <typename ViewHandler, typename ViewTraits = QHttpServerRouterViewTraits<ViewHandler>> QHttpServerRouterRule *QHttpServerRouter::addRule(std::unique_ptr<QHttpServerRouterRule> rule)
向路由器添加一个新的rule 。
若操作成功,则返回指向新规则的指针;否则返回nullptr 。
在 addRule 方法中,我们会确定 ViewHandler 的参数,并生成其QMetaType::Type 标识符的列表。然后解析路径,并将每个"<arg>" 替换为列表中对应类型的正则表达式。
提供的rule 绝不能修改QHttpServerRouter 实例。
QHttpServerRouter router;
using ViewHandler = decltype([] (const QString &page, const quint32 num) { });
auto rule = std::make_unique<QHttpServerRouterRule>(
"/<arg>/<arg>/log",
[] (QRegularExpressionMatch &match,
const QHttpServerRequest &request,
QHttpServerResponder &&responder) {
});
router.addRule<ViewHandler>(std::move(rule));void QHttpServerRouter::clearConverters()
移除所有转换器。
注意:clearConverters () 不会设置默认转换器。
另请参阅 converters 和addConverter 。
QHash<QMetaType, QString> QHttpServerRouter::converters() &&
const QHash<QMetaType, QString> &QHttpServerRouter::converters() const &
返回一个映射,其中包含已注册到此QHttpServerRouter 的转换器类型和正则表达式。这些类型可用于QHttpServerRouterRules 的路径模式中。
默认情况下提供以下转换器:
| 常量 | 描述 |
|---|---|
QMetaType::Int | |
QMetaType::Long | |
QMetaType::LongLong | |
QMetaType::Short | |
QMetaType::UInt | |
QMetaType::ULong | |
QMetaType::ULongLong | |
QMetaType::UShort | |
QMetaType::Double | |
QMetaType::Float | |
QMetaType::QString | |
QMetaType::QByteArray | |
QMetaType::QUrl | |
QMetaType::Void | 一个空的转换器。 |
另请参阅 addConverter 和clearConverters 。
bool QHttpServerRouter::handleRequest(const QHttpServerRequest &request, QHttpServerResponder &responder) const
使用 `responder` 处理 HTTP 服务器收到的每个新的 `request ` 请求。
遍历规则列表以查找第一个匹配的规则,然后执行该规则,并返回true 。如果没有规则与请求匹配,则返回false 。
void QHttpServerRouter::removeConverter(QMetaType metaType)
移除类型metaType 的转换器。
另请参阅 addConverter 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.