嗨,我很擅长实施Restful服务。我在stackoverflow和msdn中进行POST时研究了类似的问题,但提供的解决方案并没有解决我的问题。
最初我收到错误400(错误请求)以及以下内容。请注意,我在相关帖子中建议的contenttype中有application / json。
function sendStartData() {
var gameID = global_GetCookie("gameID");
var eventID = global_GetCookie("eventID");
var urlVal = GetBaseURL()+"/event/"+eventID+"/start";
var dataPayload = {"gameID ":gameID,"timestamp":+new Date()};
var stringDataPayload = JSON.stringify(dataPayload);
$.ajax({
type: 'POST',
url: urlVal,
contentType: "application/json; charset=utf-8",
data: stringDataPayload,
success: function (data) {},
error: function (data) {},
dataType: 'JSON'
});
}
然后我读了一篇关于bodystyle裹/裸的帖子,然后我将我的datapayload修改为
var dataPayload = {"entity":{"someID ":someID,"timestamp":+new Date()}};
现在该服务在visual studio中被点击,它不再在chrome控制台中返回错误400。但问题是参数充满了空,尽管我可以从javascript看到它填充了正确的值。我还尝试将 BodyStyle = WebMessageBodyStyle.Wrapped 添加到我的 webinvoke 中,但随后整个第二个参数 EventInfo newData 变为空而不是填充空值。另一方面,添加 BodyStyle = WebMessageBodyStyle.Bare 让我回到错误400(错误请求)
我的服务功能在
之下 [OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/event/{eventID}/start",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
void gameStarted(String eventID, EventInfo newData);
我的数据合同类是
[DataContract]
public class EventInfo
{
[DataMember]
public int gameID { get; set; }
[DataMember]
public int timestamp { get; set; }
}
感谢任何帮助。我想在服务器端正确接收我的数据。提前谢谢。