我有一个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;
}
}
答案 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;
}
}