WCF REST读取JSON请求体

时间:2017-06-22 07:03:17

标签: c# json web-services rest wcf

我已经尝试了一个星期了解如何获取和读取HttpRequest的请求体作为JSON(它以JSON发送给我)。我认为在我的情况下它是一个WCF RESTful服务但是我'我不确定。到目前为止,我来的最远的是使用OperationContext.Current.RequestContext.RequestMessage.ToString(),它给了我请求体的内容,但它不是作为JSON,而是将它显示为奇怪的xml翻译,如下所示:

<root type="object">
<reqPrices type="object">
<regionID type="null"/>
<cityCode type="string">New York</cityCode>
<userName type="string">test</Password>
</obj>
</root>

我有一个带有以下代码的IService类:

namespace TBServices.Services.SilWebApi
{
    [ServiceContract]
    public interface IServiceSilWebApi
    {

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "prices",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare)]
        Stream DoWorkPrices();
     }
}

以及包含以下代码的服务:

    namespace TBServices.Services.SilWebApi
    {
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
        public class ServiceSilWebApi : BaseService, IServiceSilWebApi
        {
            ...
             public Stream DoWorkPrices()
            {   
              string aa = OperationContext.Current.RequestContext.RequestMessage.ToString();
              return new Stream();
            }
            ...
         }
     }

配置文件中的相关部分是:

<service name="TBServices.Services.SilWebApi.ServiceSilWebApi">
        <endpoint address="" behaviorConfiguration="web" binding="customBinding" bindingConfiguration="RawReceiveCapable" contract="TBServices.Services.SilWebApi.IServiceSilWebApi" />
 </service>

我是WCF / REST / SOAP / Web服务的新手,我已经阅读了我能找到的关于我正在尝试做的任何事情,无论是在这里还是在MSDN中,但我仍然无法弄明白。我已经看到这个链接有一个非常类似的问题:https://social.msdn.microsoft.com/Forums/vstudio/en-US/d3b6307e-886c-4b8a-a7ff-00cd9490520b/read-incoming-data-as-json-wcf?forum=wcf,但我不了解其中的大部分内容。 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果仅使用POST接收数据,则您的方法需要一个参数来接收POST数据:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "prices",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare)]
Stream DoWorkPrices(string jsonData);