2

ASP.NET Web Api Rest サービス用のクライアント/ラッパー/プロキシ プロジェクトを作成するために、Portable Class Library プロジェクトを作成しました。

私はそれをまっすぐに取得します: ボディを持つ 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を見ることでしたが、ポータブルライブラリをサポートしていないため、それも機能していないようです。

どんな助けでも大歓迎です。

4

1 に答える 1

0

これは、ポータブル クラス ライブラリに固有の問題ではないようです。プラットフォーム固有のライブラリで同じコードを実行すると、同じように失敗すると思います。したがって、問題は、HttpWebRequest の作成または使用方法、またはおそらくサーバー側の何かにあると思います。

これを実行しているプラ​​ットフォームは何ですか?

Async Targeting Pack (詳細)を参照してください。これにより、async と await のサポート、および GetRequestStreamAsync() などの一部の拡張メソッドが追加されるため、(async メソッド内で) 次のコードを使用できるようになります。

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

ただし、動作は同じである必要があるため、これだけで問題が解決するとは思いません。

于 2012-12-21T15:27:16.797 に答える