QHttpServerRouter Class
Stellt Funktionen zur Verfügung, um eine URL an eine ViewHandler
zu binden. Mehr...
Kopfzeile: | #include <QHttpServerRouter> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS HttpServer) target_link_libraries(mytarget PRIVATE Qt6::HttpServer) |
qmake: | QT += httpserver |
Seit: | Qt 6.4 |
Öffentliche Funktionen
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) |
Detaillierte Beschreibung
QHttpServerRouter ist eine Klasse, die http-Anfragen mit einem regelbasierten System an ihre jeweiligen Handler verteilt.
Sie können neue QHttpServerRouterRules registrieren, die einen Anfragepfad und den entsprechenden Handler repräsentieren. Variable Teile in der Route können mit Platzhaltern im Anfragepfad angegeben werden. Der Handler erhält den Wert des Platzhalters als QRegularExpressionMatch. Die Argumente können von jedem Typ sein, für den ein converter verfügbar ist. Die Erstellung des Handlers kann mit QHttpServerRouterRule::bindCaptured vereinfacht werden. Eine QHttpServerRouter-Instanz darf durch ihre Regeln nicht modifiziert werden.
Hinweis: Dies ist eine Low-Level-Routing-API für einen HTTP-Server.
Minimales Beispiel:
auto pageView = [](const quint64 page) { qDebug() << "page" << page; };using ViewHandler = decltype(pageView);QHttpServerRouter router;// callback pageView auf Anfrage "/page/<number>" registrieren// zum Beispiel: "/page/10", "/page/15"router.addRule<ViewHandler>( new QHttpServerRouterRule("/page/", [=] (QRegularExpressionMatch &match, const QHttpServerRequest&, QHttpServerResponder &&){ auto boundView = QHttpServerRouterRule::bindCaptured(pageView, match); // es ruft pageViewboundView(); }));
Dokumentation der Mitgliedsfunktionen
QHash<QMetaType, QString> QHttpServerRouter::converters() &&
const QHash<QMetaType, QString> &QHttpServerRouter::converters() const &
Gibt eine Karte der Konvertertypen und regulären Ausdrücke zurück, die bei diesem QHttpServerRouter registriert sind. Dies sind die Typen, die in Pfadmustern von QHttpServerRouterRules verwendet werden können.
Die folgenden Konverter sind standardmäßig verfügbar:
Konstante | Beschreibung |
---|---|
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 | Ein leerer Konverter. |
Siehe auch addConverter und clearConverters.
QHttpServerRouter::QHttpServerRouter(QAbstractHttpServer *server)
Erzeugt ein QHttpServerRouter-Objekt mit Standardkonvertern.
Siehe auch converters.
[noexcept]
QHttpServerRouter::~QHttpServerRouter()
Zerstört eine QHttpServerRouter.
template <typename Type> bool QHttpServerRouter::addConverter(QAnyStringView regexp)
Fügt einen neuen Konverter für Type hinzu, der mit regexp geparst werden kann, und gibt true
zurück, wenn dies erfolgreich war, ansonsten false
. Wenn dies erfolgreich war, kann der registrierte Typ als Argument in Handlern für QHttpServerRouterRule verwendet werden. Der reguläre Ausdruck wird zum Parsen des Pfadmusters der Regel verwendet.
Wenn es bereits einen Konverter vom Typ Type gibt, wird der Regexp dieses Konverters durch regexp ersetzt.
Minimales Beispiel:
struct CustomArg { int data = 10; CustomArg() {} ; CustomArg(const QString &urlArg) : data(urlArg.toInt()) {} }; Q_DECLARE_METATYPE(CustomArg);QHttpServerRouter router; router.addConverter<CustomArg>(u"[+-]?\\d+"));auto pageView = [](const CustomArg &customArg) { qDebug("data: %d", customArg.data); };using ViewHandler = decltype(pageView);auto rule = std::make_unique<QHttpServerRouterRule>( "/<arg>/log", [&router, &pageView] (QRegularExpressionMatch &match, const QHttpServerRequest&request, QHttpServerResponder&&responder) { // Binden und Aufrufen von viewHandler mit der erfassten Zeichenkette von match und quint32: QHttpServerRouterRule::bindCaptured(pageView, match)(); }); router.addRule<ViewHandler>(std::move(rule));
void QHttpServerRouter::addConverter(QMetaType metaType, QAnyStringView regexp)
Fügt einen neuen Konverter für metaType hinzu, der mit regexp geparst werden kann. Ein Konverter für metaType ermöglicht die Verwendung dieses Typs in einem Pfadmuster von QHttpServerRouterRule. Der reguläre Ausdruck wird verwendet, um Parameter des Typs metaType aus dem Pfadmuster zu parsen.
Wenn es bereits einen Konverter des Typs metaType gibt, wird der regexp dieses Konverters durch regexp ersetzt.
Siehe auch converters und clearConverters.
template <typename ViewHandler, typename ViewTraits = QHttpServerRouterViewTraits<ViewHandler>> QHttpServerRouterRule *QHttpServerRouter::addRule(std::unique_ptr<QHttpServerRouterRule> rule)
Fügt dem Router eine neue rule hinzu.
Gibt im Erfolgsfall einen Zeiger auf die neue Regel zurück, andernfalls nullptr
.
Innerhalb von addRule ermitteln wir die ViewHandler-Argumente und erstellen eine Liste ihrer QMetaType::Type ids. Dann wird die URL geparst und jedes <arg>
durch einen Regexp für seinen Typ aus der Liste ersetzt. Die rule darf die Instanz QHttpServerRouter nicht verändern.
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()
Entfernt alle Konverter.
Hinweis: clearConverters() richtet keine Standardkonverter ein.
Siehe auch converters und addConverter.
bool QHttpServerRouter::handleRequest(const QHttpServerRequest &request, QHttpServerResponder &responder) const
Behandelt jede neue request für den HTTP-Server mit responder.
Iteriert durch die Liste der Regeln, um die erste passende Regel zu finden, führt diese dann aus und gibt true
zurück. Gibt false
zurück, wenn keine Regel auf die Anfrage zutrifft.
void QHttpServerRouter::removeConverter(QMetaType metaType)
Entfernt den Konverter für den Typ metaType.
Siehe auch addConverter.
© 2025 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.