Skip to content

路由的占位符解析和查询参数的解析覆盖问题 #573

Open
@zixiai

Description

@zixiai

router.cpp示例中:

// RESTful API: /group/:group_name/user/:user_id
// curl -v -X DELETE http://ip:port/group/test/user/123
router.Delete("/group/:group_name/user/:user_id", Handler::restful);
// router.Delete("/group/{group_name}/user/{user_id}", Handler::restful);

这里路由占位符的解析是在Handler::restful中调用了HttpContext的param,即HttpRequest的GetParam:

int Handler::restful(const HttpContextPtr& ctx) {
// RESTful /:field/ => HttpRequest::query_params
// path=/group/:group_name/user/:user_id
std::string group_name = ctx->param("group_name");
std::string user_id = ctx->param("user_id");
ctx->set("group_name", group_name);
ctx->set("user_id", user_id);
response_status(ctx, 0, "OK");
return 200;

这个方法是查询参数的解析,这样合在一起会导致这里占位符的解析覆盖了查询参数的解析,如对于/api/test/{str},会导致 GET http://ip:port/api/test/xxx?str=yyy 后,服务器获取查询参数param("str")时,xxx会覆盖yyy

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions