我有一个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垃圾混乱我的/帮助页面?
答案 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>
答案 2 :(得分:0)
我对MS如何实现此功能感到非常不满。它们不对输出提供任何控制,并且所有实现细节都是私有的。接口,类等......
由于其他原因,我最终构建了自己的示例生成器,但在阅读了与此相关的所有代码之后,我可以确定您无法控制行为。
可选地,如果您对此有强烈的感觉,可以添加IOperationBehavior并去除xml示例输出。标记格式正确,您应该能够轻松解析并找到要从最终标记中删除的部分。
如果你想进一步追求这个,请告诉我,我可以给你更多细节。