我试图了解如何使用 WCF 数据服务(基于 EF 4.1)来创建一个将作为 JSON 对象传递的实体持久化的宁静 Web 服务。
我已经能够创建一个可以接受带有一组原始数据类型作为参数的 GET 请求的方法。我不喜欢那个解决方案,我更愿意在 http 请求正文中发送一个带有 JSON 对象的 POST 请求。
我发现我无法让框架为我将 json 序列化为对象,但我可以手动完成。
我的问题是我似乎无法读取 POST 请求的正文 - 正文应该是 JSON 有效负载。
下面是一个粗略的裂缝。我已经尝试了一些不同的迭代,似乎无法从请求正文中获取原始 JSON。
有什么想法吗?更好的方法来做到这一点?我只想发布一些 JSON 数据并进行处理。
[WebInvoke(Method = "POST")]
public void SaveMyObj()
{
StreamReader r = new StreamReader(HttpContext.Current.Request.InputStream);
string jsonBody = r.ReadToEnd(); // jsonBody is empty!!
JavaScriptSerializer jss = new JavaScriptSerializer();
MyObj o = (MyObj)jss.Deserialize(jsonBody, typeof(MyObj));
// Now do validation, business logic, and persist my object
}
我的 DataService 是一个实体框架 DataService,它扩展
System.Data.Services.DataService<T>
如果我尝试将非原始值作为参数添加到方法中,我会在跟踪日志中看到以下异常:
System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
'Void SaveMyObj(MyNamespace.MyObj)' has a parameter 'MyNamespace.MyObj o' of type 'MyNamespace.MyObj' which is not supported for service operations. Only primitive types are supported as parameters.