使用POCO在正文中进行POST?

时间:2016-05-17 14:42:13

标签: .net asp.net-mvc-4 post asp.net-web-api

我有一个Entity Framework对象(代码优先),所以它本质上是一个POCO。我想把它通过网络传递给WebAPI服务(WebAPI是MVC)。

  • 我正在进行调用的目标.net框架是4.0(aspx),这是无法更改的。
  • 接听电话的WebAPI是4.5.1,最新的MVC和EF版本,但它已经跨线,所以没有版本冲突。
  • 包含我要传输的对象的EF类项目也是4.5.1但是我没有遇到任何问题(在aspx项目中使用过它,奇迹般地,没有问题)。< / LI>
  • 当嵌入到4.0项目中时,调用所有EF方法和DBContext调用都可以完美地工作,所以这也不是问题(我们希望通过Web服务,而不是直接EF调用)。
  • EF代码的第一个模型仅用作POCO。例如,我们使用List(EF_Obj)绑定到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对象抛出并在那里处理它,但发送名称/值对也会起作用。

那说:

  1. 是否可以使用POCO [FromBody]执行此操作?如果是这样,怎么样?

  2. 为什么我的值没有传递给POST处理程序?

  3. 编辑:作为参考,我目前正在研究这个问题和答案:

    HTTP request with post

1 个答案:

答案 0 :(得分:0)

如链接中所述,有很多方法可以做到这一点,但是添加了如何使用restSharp。使用nuget安装restsharp,创建一个简单的类,如下所示

public class SampleRestClient
{
    private readonly RestClient _client;        

    private readonly string _url = "http://xyz/"; //URL of the API  

    public IRestResponse Submit(SAmpleViewModel model)
    {
        _client = new RestClient(_url);
        var request = new RestRequest("api/Submit", Method.POST) { RequestFormat = DataFormat.Json };

        request.AddBody(model);

        var response = _client.Execute(request);
        return response;
    }
}       

现在您可以在需要的地方调用Submit方法。希望这会有所帮助。