5

我有一个 REST 服务,它有多个使用它的客户端,据我所知,它设置为仅在执行 POST/PUT 时接受 JSON(并且仅在所有调用中返回 JSON)。问题是在服务/帮助页面上,它同时显示了 JSON 和 XML 的示例。有没有办法删除所有额外的 XML 垃圾以免混淆用户(因为服务只接受 JSON)并且只在 /help 页面上显示 JSON 示例?这是我的 Web.config:

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json" />
  </webHttpEndpoint>
</standardEndpoints>

我的每个 GetGets/WebInvokes 都使用 JSON 定义为格式,例如:

[WebInvoke(UriTemplate = "/sample", BodyStyle = WebMessageBodyStyle.Bare, Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

那么,我还能做些什么来让服务知道它只是 JSON删除自动生成的 XML 垃圾,这些垃圾会弄乱我的 /help 页面吗?

4

3 回答 3

3

拿走你的Microsoft.ApplicationServer.Http.HttpConfiguration config并删除它XmlFormatter(默认情况下它有一个 JSON 格式化程序和一个 XML 格式化程序)。

var config = new Microsoft.ApplicationServer.Http.HttpConfiguration();
config.Formatters.Remove(config.Formatters.XmlFormatter);

现在您可以使用此配置创建一个HttpServiceHostFactory,并使用它来注册路由。

//RouteTable is of type System.Web.Routing.RouteCollection
RouteTable.Add(new WebApiRoute(
    "MyService",
    new HttpServiceHostFactory { Configuration = config },
    typeof(MyService)));

除了“它对我有用”之外,我没有任何可靠的消息来源。

于 2013-03-26T23:01:37.067 回答
0

您可以通过将其添加到 web.config 来禁用帮助页面:

<webServices>
 <protocols>
   <remove name="Documentation" />
 </protocols>
</webServices>

资源

于 2012-12-28T20:02:12.340 回答
0

我对 MS 如何实现此功能非常不满意。它们不提供对输出的任何控制,并且所有实现细节都是私有的。接口、类等...

由于其他原因,我最终构建了自己的示例生成器,但在阅读了与此相关的所有代码后,我可以肯定地告诉你,你无法控制行为。

或者,如果您对此有强烈的感觉,您可以添加一个 IOperationBehavior 并去除 xml 示例输出。标记格式正确,您应该能够轻松解析并找到要从最终标记中删除的部分。

如果你觉得你想进一步追求这个让我知道,我可以给你更多的细节。

于 2013-03-26T22:57:00.393 回答