2

我们创建了一个可移植类库项目来为我们的 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 是假的,所以它是不可写的,这几乎意味着我们不能对 body 做任何 POST 请求。

有人可以在这里帮助我们并告诉我们应该如何执行 POST 请求吗?我在这里找到了另一个帖子,答案是看看 RestSharp 但这似乎也不起作用,因为它不支持便携式库。

任何帮助表示赞赏。

4

1 回答 1

0

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

您在哪个平台上运行它并遇到故障?

您可能想查看Async Targeting Pack更多信息)。这将添加异步和等待支持以及一些扩展方法,例如 GetRequestStreamAsync(),因此您将能够使用以下代码(在异步方法内):

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

行为应该是相同的,所以我不希望这本身会解决你的问题。

于 2012-12-21T15:27:16.797 回答