我有一个 WCF 网络服务,它与一些不同的客户端一起工作非常酷。
一些客户端将其作为XML使用,而其他客户端则作为JSON使用。为了有这种行为,我设计了所有的服务,就好像它们有一个扩展一样。如果扩展名等于json,则返回 JSON,否则返回 XML。
下面的代码显示了我是如何完成这种行为的。
[WebGet(UriTemplate = "test.{PsFormat}")]
public string test(string PsFormat) {
DefineResponseFormat(PsFormat);
return "test";
}
public static void DefineResponseFormat(string PsFormat)
{
OutgoingWebResponseContext context = WebOperationContext.Current.OutgoingResponse;
if (PsFormat.ToLower() == "json") {
context.Format = WebMessageFormat.Json;
context.ContentType = "application/json; charset=utf-8";
}
else if (PsFormat.ToLower() == "wjson") {
context.Format = WebMessageFormat.Json;
context.ContentType = "application/json; charset=utf-8";
// CHANGE BodyStyle TO WRAPPED
}
else {
context.Format = WebMessageFormat.Xml;
context.ContentType = "text/xml; charset=utf-8";
}
}
问题在于,我总是返回 JSON,就好像 WebGet Attribute BodyStyle = WebMessageBodyStyle.Bare 一样,这是默认值。现在,我有一个新客户端,需要将其定义为 BodyStyle = WebMessageBodyStyle.Wrapped。(在上面的代码中表示为 else if,扩展名为wjson。)
问题是:如何以编程方式更改 BodyStyle 值?