如何接受json字符串作为参数

时间:2012-09-02 17:21:53

标签: c# wcf-data-services

我有像

这样的方法的wcf

Void finalize(string jsonstring);

我使用请求url,如finalize / {json}

但是,如果用json调用它,它会给出错误的请求原因,如:等等

如何修复

这是我用于方法的代码

        [WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "FinalBooking/{BookingJsonString}")]
        public int Finalize(string JsonString)
        {
            int result; // 1 success , 0 faill

            JavaScriptSerializer json_serializer = new JavaScriptSerializer();
            Routess routes =
                   (Routess)json_serializer.DeserializeObject(JsonString);
            using (XEntities context = new XEntities())
            {
                result = context.usp_Final(routes.TypeID, routes.regID, routes.CycleID, routes.DateTime,
                      routes.LocationID, routes.PatID, routes.PO, routes.BTID, routes.DID);



            }

            return result;

        }

    }

和Data的例子是简单的JSON字符串,如

{"DateTime":"03/09/2012 09:00","CycleID":6,"BTID":31,"DiseaseID":814,"LocID":36,"PatID":13,"PO":1,"TypeID":744,"rID":-1}

祝你好运

1 个答案:

答案 0 :(得分:0)

将JSON字符串添加到网址时,是否对其进行了网址编码?如果网址是使用C#创建的,那么您可以使用HttpServerUtility.UrlEncode()或javascript中的内容,escape()

如果您可以在发送时显示该网址,那将会很有帮助。目前尚不清楚URL是否是问题,或WCF中的内容。


编辑:

查看您发布的代码,我注意到您的UriTemplate与您的方法参数名称不匹配:

[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
UriTemplate = "FinalBooking/{BookingJsonString}")]
    public int Finalize(string JsonString)

BookingJsonStringJsonString

UriTemplate有两种绑定模式:“Bind By Name”,名称应该匹配,“Bind By Position”,它忽略名称,只是通过参数索引。我似乎无法找到有关WCF WebInvoke使用的模式的任何信息,因此您可能需要尝试重命名模板或参数以匹配。