1

我有一个 WCF 宁静的网络服务。通常,我的每个端点都可以用 /service/help 完美地描述,因为它们只使用查询字符串作为输入参数。例如,我有以下简单的功能:

[WebInvoke(UriTemplate = "customer?name={name}", Method = "POST")]
public void customer(string name)

这在 /service/help 中显示为:

Service at http://localhost:7000/service/customer?name={NAME}

不幸的是,我不能在两种情况下这样做:

  1. 具有令人难以置信的长值的端点(查询字符串被截断)
  2. 包含敏感数据的端点(IIS 记录的密码参数)

对于这两种情况,我知道需要传递一个请求正文。将我的功能更改为:

[WebInvoke(UriTemplate = "customer", Method = "POST")]
public void customer(Stream requestBody)

现在 /service/help 只返回

Service at http://localhost:7000/service/customer

如果我单击链接并导航到 /service/help/operations/customer,我也不会收到任何有用的信息:

The Request body is a byte stream

如何向 API 的使用者描述请求正文的 XML/json 结构?我可以以某种方式利用 /service/help 还是被迫使用 API 文档?

4

1 回答 1

0

我的第一个想法:我会说用 in-url 参数装饰所有 API 端点仅在某些时候有用,并且您确实应该为您的 API 构建一个完整的 API 文档,其中您提供了有关预期的信息/service/customer 等请求的输入和输出。

此外,为什么名称会如此长以至于 url 被截断?如果我是你,我会认为 1000 字符长的名称是无效输入,应该立即400: bad request响应

于 2013-09-27T17:12:57.047 回答