0

我使用单个 GET 操作创建了一个 ASP.NET MVC4 Web API 服务 (REST)。该操作当前需要 11 个输入值,因此我没有在 URL 中传递所有这些值,而是选择将这些值封装到单个类类型中并将其作为 Content-Body 传递。在 Fiddler 中进行测试时,我将动词指定为 GET,并在“请求正文”输入框中输入 JSON 文本。这很好用!

问题是当我尝试在 Visual Studio 2010 Ultimate 中执行负载测试时。我能够指定 GET 操作和 JSON Content-Body 就好了。但是当我运行负载测试时,VS 在测试结果中报告了 ProtocolViolationException 类型的异常(无法发送具有此动词类型的内容主体)。测试在 1 毫秒内执行,所以我怀疑异常导致测试立即中止。我能做些什么来避免这些异常?我宁愿不更改我的 API 以使用 URL 参数来解决测试工具的问题。如果我出于其他原因更改 API,请告诉我。谢谢!

4

1 回答 1

0

我发现提出这个答案比继续讨论更容易。

发送内容GET在 RFC 2616 中没有定义,但也没有被禁止。因此,就规范而言,我们处于一个必须做出判断的领域。

GET规范地用于获取资源。所以你正在使用这个动词和你发送的参数来检索这个资源。由于GET既安全又幂等,因此非常适合缓存。缓存通常基于资源 URI 进行 - 有时基于各种标头。关键是缓存实现 - AFAIK - 不会使用 GET 内容(老实说,我在现实世界中没有看到任何 GET 内容)。并且将内容包含在密钥生成中是没有意义的,因为它会降低缓存的可伸缩性。

如果您有要发送的参数,它们必须在 URI 中,因为这是定义该 URI 的一部分。因此,我坚信使用 GET 发送内容是错误的

即使您查看诸如 OData 之类的实现,它们也会将标准放在 URI 中。我无法想象您的(或任何)应用程序要求超出了 OData 查询要求。

于 2012-07-21T09:58:04.730 回答