通过POST将未转义的JSON数据发送到WCF

时间:2014-06-09 11:08:20

标签: c# json wcf post

我有一个restfull WCF服务,当我通过POST方法发送转义的JSON数据时工作正常。但是当我发送Unescaped JSON时,它会出现错误的错误请求。任何人都可以告诉我一个解决方案。这是我在WCF中使用的接口代码。

  [ServiceContract]
  public interface IService1
  {
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "LoginCloudUser", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    DNNLoginResponse LoginCloudUser(string args);

    [OperationContract]
    UserCredential GetDataUsingDataContract(UserCredential composite);

    // TODO: Add your service operations here
  }

更新:我正在使用JSON.Net来序列化JSON。但是我已经尝试删除所有代码并仅将参数作为字符串返回。如果没有转义JSON,它仍然会出错。

public DNNLoginResponse LoginCloudUser(string args)
    {
        try
        {
            JsonSerializerSettings jss = new JsonSerializerSettings();
            jss.StringEscapeHandling = StringEscapeHandling.Default; 
            DNNLogin du = JsonConvert.DeserializeObject<DNNLogin>(args, jss);
            bool validateresult = DNNLogin.ValidateUser(du); 

            DNNLoginResponse dlogres = new DNNLoginResponse(); 
            dlogres.result  = validateresult;
            dlogres.resulttype = "Success"; 
            dlogres.userid = du.username;

            return dlogres; //JsonConvert.SerializeObject(dlogres, Formatting.None, jss); 
        }
        catch
        { 
            DNNLoginResponse dlogres = new DNNLoginResponse(); 
            dlogres.result = false;
            dlogres.resulttype = "Internal Error";
            dlogres.userid = string.Empty;

            return dlogres;  
        }
    }

1 个答案:

答案 0 :(得分:0)

我删除了JSON.NEt并将代码更改为此,它的工作非常好。

 [ServiceContract]
 public interface IService1
 {
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "LoginCloudUser", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    DNNLoginResponse LoginCloudUser(DNNLogin args);

    [OperationContract]
    UserCredential GetDataUsingDataContract(UserCredential composite);

    // TODO: Add your service operations here
}

功能代码。

       public DNNLoginResponse LoginCloudUser(DNNLogin args)
      {
        try
        {

            bool validateresult = DNNLogin.ValidateUser(args); 

            DNNLoginResponse dlogres = new DNNLoginResponse();
            if (validateresult)
            {
                dlogres.result = validateresult;
                dlogres.resulttype =  "Success" ;
                dlogres.userid = args.username;
            }
            else
            {
                dlogres.result = validateresult;
                dlogres.resulttype = "Login Error";
                dlogres.userid = string.Empty;

            }


            return dlogres; //JsonConvert.SerializeObject(dlogres, Formatting.None, jss); 
        }
        catch
        { 
            DNNLoginResponse dlogres = new DNNLoginResponse(); 
            dlogres.result = false;
            dlogres.resulttype = "Internal Error";
            dlogres.userid = string.Empty;

            return dlogres;  
        }
    }