2017-06-22 126 views
0

我一直在尝试一个星期了解如何获取和阅读HttpRequest的请求正文为JSON(它发送给我的JSON)。我认为在我的情况下它是一个WCF RESTful服务,但我不确定。到目前为止,我已经走过最远的是通过使用OperationContext.Current.RequestContext.RequestMessage.ToString()这给了我请求主体的内容,但不是作为JSON它显示了它作为它的一个奇怪的XML转换,就像这样:WCF REST阅读JSON请求主体

<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,但我不明白它的大部分。 任何帮助将非常感激!

回答

0

如果您在使用POST而已,你的方法需要一个自变量接收POST数据接收数据:

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

感谢,但我已经尝试过了,那么它甚至没有去这个功能运行时,就像它不认为它是匹配的 – Shirli