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

5

我有一个REST服务,有几个客户端在使用它。据我所知,该服务只在进行POST/PUT时接受JSON(并且在所有调用中仅返回JSON)。问题是,在服务的/help页面上,它显示了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,并清除干扰/help页面的自动生成XML垃圾吗?


我不确定您是否可以禁用帮助页面中的XML示例。请查看Autodocs。您可能可以修改它以停止显示XML示例。 - Obaid
你可以编写自己的帮助文件并显示它,而不是使用框架生成的默认文件。 - Rajesh
请务必查看下面的答案……这里有很多错误信息。您可以使用自动生成的帮助页面,而且不必显示XML。 - Timothy Shields
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)));

除了“对我有效”这句话之外,我没有其他可靠的来源。


0

您可以通过将以下内容添加到您的 web.config 文件来禁用帮助页面:

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

来源


1
我并不想禁用所有的帮助,我只是想从/help页面中删除垃圾XML示例,因为该服务未配置为接受XML。此外,似乎我上面发布的配置优先于你在这里的配置,因为我尝试了一下,/help仍然启用。但无论如何,我希望它能够启用。 - Stephen Fischer

0

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

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

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

如果你想进一步追究此事,请让我知道,我可以给你更多的细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接