如何将JSON字符串作为输入参数传递给WCF RESTful服务?

时间:2013-10-11 09:51:38

标签: .net wcf c#-4.0 poster

我有一个如下的网络服务,

  [ServiceContract]
        public interface IRestServiceImpl
        {             
            [OperationContract]
            [WebInvoke(Method = "POST",
                ResponseFormat = WebMessageFormat.Json,
                BodyStyle = WebMessageBodyStyle.Wrapped,
                UriTemplate = "json/{jsondata}")]
            void JSONData(string jsondata);       
        }


    public class RestServiceImpl : IRestServiceImpl
    {
        List<ClsTripAdvisorData> lst = new List<ClsTripAdvisorData>();
        ClsTripAdvisorData _ClsTripAdvisorData = null;

        #region IRestServiceImpl Members       
        public void JSONData(string jsondata)
        {
            string[] data = jsondata.Split('&');
        }
}

它期待JSON输入。我正在通过传递JSON字符串作为查询字符串请求来测试此服务,如下所示,

http://localhost:1162/RestServiceImpl.svc/json/api_version=4 &hotels=[{"ta_id":97497,"partner_id":"229547","partner_url":"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","partner_url":"http://partner.com/deeplink/to/id34234"}] &start_date=2013-07-01 &end_date=2013-07-03 &num_adults=2 &num_rooms=1 &lang=en_US &currency=USD &user_country=US &device_type=d &query_key=6167a22d1f87d2028bf60a8e5e27afa7_191_1360299600000_2_2

此处我的字符串参数为api_version=4 &hotels=[{"ta_id":97497,"partner_id":"229547","partner_url":"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","partner_url":"http://partner.com/deeplink/to/id34234"}] &start_date=2013-07-01 &end_date=2013-07-03 &num_adults=2 &num_rooms=1 &lang=en_US &currency=USD &user_country=US &device_type=d &query_key=6167a22d1f87d2028bf60a8e5e27afa7_191_1360299600000_2_2

调试时没有达到服务方法断点。

同时为下面的JSON工作,

http://localhost:1162/RestServiceImpl.svc/json/asd

不接受JSON字符串输入的服务方法

我只想将此字符串作为我的Web服务的正文部分发送。但我不知道如何使用wcf rest service发送和接收此json字符串

1 个答案:

答案 0 :(得分:1)

将以下装饰添加到方法

<OperationContract()> _
    <WebGet(UriTemplate:="YourCoolFunction?inpt={inpt}", BodyStyle:=WebMessageBodyStyle.Wrapped,
            RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Xml)> _
    Public Function YourCoolFunction(inpt As String) As String

在.svc文件中,添加 Factory =“System.ServiceModel.Activation.WebServiceHostFactory”

在web.config中添加

<defaultDocument>
  <files>
    <add value="YourFile.svc"/>
  </files>
</defaultDocument>