1

我有一个 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 值?

4

1 回答 1

1

这篇文章有与你类似的问题 - http://social.msdn.microsoft.com/Forums/vstudio/en-US/8636a582-4c58-4ac0-a925-d7df5309423b/change-response-format-programmatically

于 2013-08-02T02:38:45.800 回答