2017-06-22 130 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