如何使用 Wiremock 中的响应模板使用来自请求的数据设置响应主体值?

How to set response body values using data from request using response templating in Wiremock?

我有这个 JSON 请求-响应定义。请求正文是 text/plain。

{
  "request": {
    "method": "POST",
    "url": "/users",
    "bodyPatterns": [
      {
        "equalTo": "Name Bob Age 30"
      }
    ]

  },
  "response": {
    "status": 200,
    "body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><UsersResponse><Name>Bob</Name><Age>30</Age></UsersResponse>",
    "transformers": ["response-template"],
    "headers": {
      "Content-Type": "text/xml"
    }
  }
}

我希望 'Bob' 和“30”不是硬编码的,而是作为请求和响应的变量。 因此,如果请求 'Mark' '20' 到达,我想 return

"body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><UsersResponse><Name>Mark</Name><Age>20</Age></UsersResponse>"

如何实现?

WireMock 和 WireMock.Net 都支持 响应模板:

文档:

然而,这仅限于简单的模板(阅读文档以了解详细信息),无法使用 JSON 映射接口以复杂的方式定义自定义代码或提取数据。

对于 WireMock.Net,您可以自己在 C# 中对其进行硬编码,一个不同的示例可能如下所示:

server.Given(Request.Create().WithPath("/exampleIko"))
    .RespondWith(Response.Create().WithCallback(req =>
    {
        return new ResponseMessage
        {
            Body = "<xml>" + req.Body.Substring(10) +"</xml>"
        };
    }));