WCF REST服务传递对象作为POST方法

时间:2016-04-20 21:53:03

标签: c# wcf rest

我的WCF服务中有一个方法。

[OperationContract]           
[FaultContract(typeof(Hitachi.WebServices.Common.WebServiceFaultException))]
[WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "Syslog/AddServerConfiguration")]
void AddServerConfiguration(ServerConnectionInfo  serverConnectionInfo);

从客户端,我使用`HttpWebRequest``。我一直在"远程服务器返回错误:(400)错误请求。"

要传递参数serverConnectionInfo,我尝试了不同的选项 -

[1]使用简单的String格式化程序 -

String body = string.Format("{{\"serverConnectionInfo\":{{\"DeviceIP\":\"{0}\",\"Password\":\"{1}\",\"Port\":0,\"UserName\":\"{2}\"}}}}", ipAddress, password, userName);

if (!String.IsNullOrEmpty(body))
{
    byte[] bodyBytes = Encoding.UTF8.GetBytes(body);
    request.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
    request.GetRequestStream().Close();
}

[2]使用JavaScriptSerializer -

JavaScriptSerializer jss = new JavaScriptSerializer();
string data = jss.Serialize(connInfo);
String body = string.Format("{{\"serverConnectionInfo\":{0}}}", data);

[3]使用JsonConvert -

string body = JsonConvert.SerializeObject(new { serverConnectionInfo = connInfo });
request.ContentLength = body.Length;
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(body);
writer.Close();

[4]使用DataContractJsonSerializer

我想指出我使用DataContract作为ServerConnectionInfo。此外,在我的班级ServerConnectionInfo中,我有stringint个数据成员。我正在为ContentType正确设置ContentLengthHttpWebRequest

此方法与REST客户端" POSTMAN"。

完美配合

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我刚刚在代码中更改了以下行(问题中未提及),它开始工作。

request.ContentType = "application/json; charset:utf-8";

更改为

request.ContentType = "application/json";

现在,我怀疑的是,在请求的内容类型中指定字符集有什么问题。