我正在尝试了解如何使用基于EF 4.1的WCF数据服务创建一个可以持久化JSON对象的RESTful Web服务。
我已经能够创建一个接受一组原始数据类型作为参数的GET请求的方法。但我不喜欢这种解决方案,我更希望发送一个带有JSON对象的POST请求来完成操作。
我发现框架无法将JSON序列化为对象,但我可以手动完成。我的问题是似乎无法读取POST请求的主体 - 主体应该是JSON负载。
以下是粗略的代码示例。我尝试了几个不同的迭代版本,但似乎无法从请求正文中获取原始JSON数据。
您有什么想法?是否有更好的方法?我只想POST一些JSON数据并进行处理。
我的DataService是一个扩展了Entity Framework DataService的服务。
如果我尝试将非原始值作为方法参数添加,我会在跟踪日志中看到以下异常:
我已经能够创建一个接受一组原始数据类型作为参数的GET请求的方法。但我不喜欢这种解决方案,我更希望发送一个带有JSON对象的POST请求来完成操作。
我发现框架无法将JSON序列化为对象,但我可以手动完成。我的问题是似乎无法读取POST请求的主体 - 主体应该是JSON负载。
以下是粗略的代码示例。我尝试了几个不同的迭代版本,但似乎无法从请求正文中获取原始JSON数据。
您有什么想法?是否有更好的方法?我只想POST一些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是一个扩展了Entity Framework 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.
code
... has a parameter 'MyNamespace.MyObj bv' of type 'MyNamespace.MyObj' which is not supported for service operations. Only primitive types are supported as parameters.code
- codemonkeyDataService<T>
。我将编辑我的帖子,提供一个完整的代码示例,展示我使用的在我看来非常出色的方法。 - anthony sottileDataService<T>
пјҢд»ӨдәәеӨұжңӣзҡ„жҳҜе®ғдёҚж”ҜжҢҒжңҚеҠЎж–№жі•и°ғз”Ёзҡ„еҜ№иұЎеҸӮж•°гҖӮ - codemonkey