【问题标题】:Disable XML examples in WCF REST service?在 WCF REST 服务中禁用 XML 示例?
【发布时间】:2012-12-28 19:55:59
【问题描述】:

我有一个 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 并删除我 /help 页面上的自动生成 XML 垃圾?

【问题讨论】:

  • 我不确定您是否可以禁用帮助页面中的 XML 示例。看看Autodocs。您可能可以修改它以停止显示 XML 示例。
  • 您可以编写自己的帮助文件并显示它,而不是使用框架默认生成的文件。
  • 一定要看看我下面的答案......这里有很多错误信息。您可以使用自动生成的帮助页面并且让它不显示 XML。

标签: c# .net json wcf rest


【解决方案1】:

获取您的 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)));

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

【讨论】:

    【解决方案2】:

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

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

    source

    【讨论】:

    • 我并没有尝试禁用所有帮助,而是尝试从 /help 页面中删除垃圾 XML 示例,因为该服务未配置为接受 XML。此外,我在上面发布的配置似乎优先于您在此处的配置,因为我尝试过它并且 /help 仍然启用。但无论如何,我希望它启用。
    【解决方案3】:

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

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

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

    如果您想进一步了解这一点,请告诉我,我可以为您提供更多详细信息。

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多