可移植库的POST / PUT请求

时间:2012-12-20 14:41:11

标签: c# .net-4.0 portable-class-library

我们已经创建了一个可移植类库项目来为我们的ASP.NET Web Api Rest服务编写客户端/包装器/代理项目。

我会直截了当地说:似乎我们不能做有身体的POST / PUT请求。

var dataBytes = Encoding.UTF8.GetBytes(data);

var requestHandle = request.BeginGetRequestStream(ar =>
{
    using (var stream = request.EndGetRequestStream(ar))
    {
        stream.Write(dataBytes, 0, dataBytes.Length); // Exception thrown here
    }
}, null);

当我尝试写入请求时,我得到一个例外:

  

请求已中止:连接意外关闭。

经过一段时间后,我认为stream.CanWrite为false,因此它不可写,这几乎意味着我们无法对正文进行任何POST请求。

有人可以帮助我们,告诉我们应该如何处理POST请求吗?我在这里找到了另一篇文章,答案是看看RestSharp,但由于它不支持Portable Library,因此似乎无法工作。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这看起来不像是特定于可移植类库的问题。如果您在特定于平台的库中运行相同的代码,我预计它将以相同的方式失败。所以我希望问题是你创建或使用HttpWebRequest的方式,或者是服务器端的问题。

您正在运行此平台并获得失败?

您可能需要查看Async Targeting Packmore info)。这将添加async和等待支持以及一些扩展方法,如GetRequestStreamAsync(),因此您将能够使用以下代码(在异步方法内):

using (var stream = await request.GetRequestStreamAsync())
{
    stream.Write(dataBytes, 0, dataBytes.Length);
}

行为应该是相同的,但我不认为这本身会解决你的问题。