【发布时间】:2016-05-17 14:42:12
【问题描述】:
我有一个实体框架对象(代码优先),所以它本质上是一个 POCO。我想把它通过网络传递给 WebAPI 服务(WebAPI 是 MVC)。
- 我需要调用的目标 .net 框架是 4.0 (aspx),无法更改。
- 捕获调用的 WebAPI 是 4.5.1,是最新的 MVC 和 EF 版本,但它是跨网络的,因此没有版本冲突。
- 包含我要传输的对象的 EF 类项目也是 4.5.1,但我没有遇到任何问题(在 aspx 项目中使用过它,奇迹般地,它可以正常工作)。
- 调用所有 EF 方法和 DBContext 调用在嵌入到 4.0 项目中时可以完美运行,因此这也不是问题(我们希望通过 Web 服务来实现,而不是直接 EF 调用)。
- EF 代码优先模型仅用作 POCO。例如,我们使用一个(EF_Obj 的)List 来绑定到 DataGrids,所以同样没有版本冲突。
我设法使用以下方法进行了简单的 GET 调用:
Using client = New WebClient()
responseString = client.DownloadString(String.Format("http://localhost:1234/MyURLGet/{0}", txtValue.Text.Trim()))
myPOCO_Class = Newtonsoft.Json.JsonConvert.DeserializeObject(Of MyPOCO_EF_obj)(responseString)
End Using
这很好用。当我想插入数据库时,问题是试图将MyPOCO_EF_Obj 附加到 POST 的主体。
到目前为止,我发现的是这个,但它不允许我附加 POCO 类,只能附加字符串:
Using client = New WebClient()
'assemble the data
Dim values As New NameValueCollection
values("value") = txtValue.Text.Trim()
values("description") = txtDescription.Text.Trim()
Dim response = client.UploadValues("http://localhost:1234/MyURLPOST/{0}", userName), values)
retVal = Encoding.[Default].GetString(response)
End Using
这段代码的问题在于,当它到达另一边时,values 被捕获,但没有任何数据随之而来。
public string Post(string username, [FromBody] System.Collections.Specialized.NameValueCollection values) { //etc }
我更愿意将 POCO 对象扔掉并在那里处理它,但发送名称/值对也可以。
也就是说:
是否可以使用 POCO
[FromBody]执行此操作?如果有,怎么做?为什么我的值没有传递给 POST 处理程序?
编辑:作为参考,我目前正在查看这个 SO 问题和回复:
【问题讨论】:
标签: .net asp.net-mvc-4 post asp.net-web-api