在 Postman 中使用路径参数测试 WCF API

Posted

技术标签:

【中文标题】在 Postman 中使用路径参数测试 WCF API【英文标题】:Testing WCF API with Path Parameters in Postman 【发布时间】:2017-09-09 08:54:22 【问题描述】:

我正在使用 WCF (C#) 构建一个 API,并使用 Postman 对其进行测试。我似乎在使用 Postman 中的“参数”部分时遇到了问题,因为它将我输入的任何键值对转换为查询字符串参数。

我的合同像这样指定 UriTemplate...

    [OperationContract]
    [WebGet(UriTemplate = "/GetClientDataFromAlias/Alias/alias", 
                RequestFormat = WebMessageFormat.Json,
                ResponseFormat = WebMessageFormat.Json)]
    GetClientDataFromAliasResponse GetClientDataFromAlias(string alias);

然而,当我通过 Postman 运行请求时,URL 被翻译成以下内容......

http://troikawcf.localhost/ClientWCFService.svc/GetClientDataFromAlias?Alias=myalias

我希望它翻译成以下内容,以符合我的合同

http://troikawcf.localhost/ClientWCFService.svc/GetClientDataFromAlias/Alias/myalias

我是否缺少 Postman 中的设置以将所有参数设置为路径格式?还是我需要更改我的合同以使用查询字符串参数?

有关更多信息,请参阅下面的屏幕截图...

非常感谢

【问题讨论】:

【参考方案1】:

我相信你想Creating cURL commands in Postman。 希望你能在这里找到答案。 还可以考虑使用Fiddler4 来测试restful 服务。

【讨论】:

您好,感谢您的回答 - 这对了解非常有用 - 但它仍然不允许我通过 Postman 实际测试我的 REST API。我不知道您可以像这样在 Postman 中生成代码 - 非常感谢您分享提示 :-)【参考方案2】:

UriTemplate 基本上有两个部分(来自MSDN):

路径

路径由一系列由斜杠 (/) 分隔的段组成。每个 段可以有一个文字值,一个变量值(写在 花括号 [ ],被限制为恰好匹配一个的内容 段)

可选查询

查询表达式可以完全省略。如果存在,它指定 一系列无序的名称/值对。 ... 不允许使用未配对的值。

因此,基本上有两种方法可以在 Web 请求的 URL 中包含参数:

与PathSegment Variables:

Thesa 是 花括号 中的变量,出现在 查询之前,如下所示: GetClientDataFromAlias/alias

Query Value Variables:

这些是出现在可选查询表达式中的名称/值对,类似于 GetClientDataFromAlias?Alias=myalias

在您的情况下,当使用 Postman 中的 Params 部分时,Postman 会将键/值参数添加到 查询表达式,而不是 路径段 因为查询表达式由

一系列无序的名称/值对。

如果您希望您的参数在路径段中,您需要删除 Postman 中的键/值参数,并将该参数添加到请求的 URL 中的大括号内

【讨论】:

我明白你在说什么 - 但如果可能的话,我宁愿不必使用查询字符串参数。我宁愿保留我的 UriTemplate 完整并使用路径变量。如果我必须改变以使其通过邮递员工作,这可能必须是我采取的路线。非常感谢。 仅供参考 - 当我直接在邮递员的 URL 栏中指定参数时(即我不使用“参数”下拉菜单来添加我的参数),一切正常。只有当我将它们添加到“参数”下拉列表中时,事情才会停止工作。这让我相信我的合同一切正常,邮递员并不完全支持路径变量。我会继续寻找。再次感谢您的信息。 它实际上与Postman无关,这是正确的行为。在UriTemplate 中,(可选)问号之前的任何内容都是URL 的一部分,而不是参数。查询参数是(可选)问号之后的参数。 请参考这个问题***.com/questions/4024271/…。通过 REST API 传递参数有两种不同的方式。在问题中,我的偏好是路径参数,这是问题中的选项 1。你指的是选项2。 @grimdog_john 我意识到我的答案有点混乱,所以我编辑了我的答案以包含更详细的解释。【参考方案3】:

我想出了一个方法来让它工作。

您可以在 Postman 的 URL 栏中使用占位符,这样您仍然可以使用“参数”部分来传递实际值。这对于在不通过 URL 解析的情况下快速编辑参数值非常有帮助。您可以在地址栏中设置您的 URL 结构,然后让“参数”部分完成其余的工作。

为此,您需要像往常一样将路径参数添加到 URL,但不是添加值,而是添加以冒号为前缀的占位符。占位符现在将自动出现在“键”列的“参数”部分中。您可以在“值”列中添加实际参数值,以便在运行请求时将占位符替换为实际值。

这是一个例子:- http://troikawcf.localhost/ClientWCFService.svc/GetClientDataFromAlias/Alias/:Alias

这里是 Postman 的屏幕截图以进一步澄清:-

我希望这能在未来帮助其他人,因为这让我困惑了好几天,为什么 REST 客户端不支持路径参数。

【讨论】:

以上是关于在 Postman 中使用路径参数测试 WCF API的主要内容,如果未能解决你的问题,请参考以下文章

BUG08 - 吐槽PostMan的一个BUG!Postman中模拟发送的请求,请求路径莫名其妙地在postman中被意外更改了!只有这个唯一的Controller中的全部请求才会这个样子! 浪费三

使用PostMan自动从文件中读取参数发送测试请求

使用postman的mock server

postman简单接口测试

postMan简单使用

Postman参数化