我使用单个GET操作创建了一个ASP.NET MVC4 Web API服务(REST)。该操作当前需要11个输入值,因此我选择将这些值封装到单个类类型中并将其作为Content-Body传递,而不是在URL中传递所有这些值。当我在Fiddler中测试时,我将动词指定为GET,并在" Request Body"中输入JSON文本。输入框。这很棒!
问题是当我尝试在Visual Studio 2010 Ultimate中执行负载测试时。我能够指定GET操作和JSON Content-Body就好了。但是当我运行Load测试时,VS会在测试结果中报告ProtocolViolationException类型的异常(无法使用此动词类型发送内容主体)。测试在1ms内执行,因此我怀疑异常导致测试立即中止。我该怎么做才能避免这些例外情况?我更喜欢不改变我的API以使用URL参数来解决测试工具问题。如果我出于其他原因需要更改API,请告诉我。谢谢!
答案 0 :(得分:0)
我发现这个答案更容易,而不是进行讨论。
使用GET
发送内容未在RFC 2616中定义,但尚未被禁止。因此,就规范而言,我们处于一个我们必须作出判断的领域。
GET
通常用于获取资源。因此,您将使用此动词检索此资源以及您要发送的参数。由于GET
既安全又幂等,因此非常适合缓存。缓存通常基于资源URI进行 - 有时基于各种标头。关键是缓存实现 - AFAIK - 不会使用GET内容(说实话,我还没有看到任何与现实世界中的内容相关的GET)。将内容包含在密钥生成中是没有意义的,因为它会降低缓存的可伸缩性。
如果要发送参数,它们必须位于URI中,因为这是定义该URI的一部分。 因此,我坚信使用GET发送内容是错误的。
即使您查看OData等实现,他们也会将标准放在URI中。我无法想象您的(或任何)应用程序要求超出了OData查询要求。