禁用WCF REST服务中的XML示例

本文关键字:XML 示例 服务 WCF REST 禁用 | 更新日期: 2023-09-27 17:49:43

我有一个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/webinvoke都是用JSON定义的格式,例如:

[WebInvoke(UriTemplate = "/sample", BodyStyle = WebMessageBodyStyle.Bare, Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
那么,我还能做些什么来让服务知道它是JSON 只有,并删除自动生成的XML垃圾,使我的/帮助页面混乱?

禁用WCF REST服务中的XML示例

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)));

我没有任何可靠的来源给你除了"它适用于我。"

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

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

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

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

如果您对此有强烈的感觉,您可以选择添加IOperationBehavior并剥离xml示例输出。标记格式良好,您应该能够轻松解析并找到要从最终标记中删除的部分。

如果你想进一步了解这件事,请告诉我,我可以给你更多的细节。