在WCF REST服务中禁用XML示例?

时间:2012-12-28 19:56:00

标签: c# .net json wcf rest

我有一个REST服务,有几个客户端正在使用它,据我所知,在执行POST / PUT时只接受JSON(并且只在所有调用上返回JSON)。问题是在服务/帮助页面上,它显示了JSON和XML的示例。有没有办法删除所有额外的XML垃圾,以免混淆用户(因为,再次,服务只接受JSON),只在/帮助页面上显示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垃圾混乱我的/帮助页面?

3 个答案:

答案 0 :(得分: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)));

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

答案 1 :(得分:0)

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

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

source

答案 2 :(得分:0)

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

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

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

如果你想进一步追求这个,请告诉我,我可以给你更多细节。