【问题标题】:Some help posting to ASP.NET Web API with C#一些使用 C# 发布到 ASP.NET Web API 的帮助
【发布时间】:2012-04-27 14:47:46
【问题描述】:

我一直在玩 ASP.NET Web API。我想看看我是否可以发布到我构建的方法,该方法只是返回我发布的对象:

在帐户控制器上:

// POST /api/accounts
public Account Post(Account account)
{
   return account;

}

用于发布的代码:

    public void PostAccount()
    {
        // http://local_ip/api/accounts
        var uri = string.Format("{0}", webServiceRoot); 


        var acc = new Account();
        acc.AccountID = "8";
        acc.AccountName = "Mitchel Cars";
        acc.AccountNumber = "600123801";
        acc.SubscriptionKey = "2535-8254-8568-1192";
        acc.ValidUntil = DateTime.Now;


        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/xml";
        request.ContentLength = 800;

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Account));
        xmlSerializer.Serialize(request.GetRequestStream(), acc);

        var response = (HttpWebResponse)request.GetResponse();

        XmlSerializer serializer = new XmlSerializer(typeof(Account));

        var newAcc = (Account)serializer.Deserialize(response.GetResponseStream());

    }

我已删除所有错误检查或任何样板代码,以使其更易于阅读。这严格来说是一个峰值,只是为了理解实际发布。我的理解是您应该写入 GetRequestStream()。所有的阅读等似乎都可以,但我从来没有从 request.GetResponse(); 回来。

如果我做一个简单的得到它工作正常。我确实看到你可以使用一个名为 HTTPClient 的类来做这些事情,但我不能使用它,因为我需要让它在基于 .Net 3.5 的 WinForms、Silverlight 和 Windows Phone 上工作

任何将 POCO 推送到服务器的帮助都会非常有帮助,干杯!

附加信息:

  • 目前我没有收到任何错误,测试应用只是挂起。
  • 如果我关闭 WebAPI 项目,我会收到未找到服务器的响应。
  • 我没有更改任何路线或任何其他。
  • 获取相同的控制器工作。

【问题讨论】:

  • 没什么,这就是奇怪的部分......甚至没有未处理的异常,我想它可能正在等待超时?
  • 另外,你为什么要设置ContentLength 属性?
  • 似乎是,我现在在 4 分钟,测试应用程序的 ui 仍然被阻止。我已将内容设置为 800。
  • 哦,我为什么要设置它?我认为您必须将其设置为大于或等于流的值
  • 不,让 WebRequest 在您写入请求流之后计算它。服务器可能只是试图从流中获取 X 字节,而它们不存在并且只是挂在一个循环中。

标签: c# httpwebrequest asp.net-web-api


【解决方案1】:

您需要关闭响应流。我看到的大多数示例也显示设置内容长度。您可能最好序列化为内存流,然后将该流的长度用作 Content-Length。不幸的是,在 .net 3.5 中没有 CopyStream,因此您可能必须自己编写。

【讨论】:

    【解决方案2】:

    如果你想使用 HttpClient,你可以安装下载的 REST starter Kit。并将 DLL 用作外部 DLL

    http://forums.asp.net/t/1680252.aspx/1

    【讨论】:

    • 我的理解是,虽然这适用于 Winforms,但我会回到与 Silverlight 和 WP7 的第一方,这是我们正在寻找此 Web 服务的两个地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2017-01-16
    • 2016-08-09
    • 2016-12-08
    相关资源
    最近更新 更多