前言:
本篇继续在前一篇的基础上实现
之前实现了Cutelyst无格式提交参数,本篇尝试另一种方法,使用链式动作提取请求参数
一、修改控制器源码
编辑src/books.h并修改如下:
public:
...
/**
* Create a book with the supplied title, rating, and author
*/
// C_ATTR(url_create, :Local :Args(3))
C_ATTR(url_create, :Chained("/") :PathPart("books/url_create") :Args(3))
void url_create(Context *c, const QString &title, const QString &rating, const QString &authorId);
这将转换方法以利用链式操作/分派类型。通过链接,可以将一个URL自动分派给多个控制器方法,每个方法都可以精确控制它将接收的参数数量。链基本上可以被认为有三个部分——开始、中间和结束。
在上面的url_create方法中,我们将所有三个部分组合成一个方法::Chained("/") 来启动链,:PathPart("books/url_create") 来指定要匹配的基本url,以及:Args(3)来准确捕获三个参数并结束链。
Cutelyst从URL中获取“额外的斜杠分隔信息”,并将其作为参数传入
:Args(3)表明有3个参数,通过"/"分开,3个参数分别对应到实现的函数参数上
完整的url请求为http://localhost:3000/books/url_create/TCPIP_Illustrated_Vol-2/5/4
二、编译并测试
直接编译,生成动态库,并运行服务,输出如下
可以看到,url_create已从“加载的路径操作”部分消失,但它现在显示在新创建的“加载的链接操作”部分下。“//*”部分清楚地显示了我们对三个参数的要求。
在浏览器中访问http://localhost:3000/books/url_create/TCPIP_Illustrated_Vol-2/5/4
运行如下所示
点击Home,可以看到又多了一行数据
本测试源码下载
后记:
笔者仅简单使用了链式动作,请求参数也未发生变化,但笔者产生了不少使用上的疑问
下一篇,笔者仍然探究链式动作相关