Restsharp: RestRequest.AddFileが機能しない

作成日 2010年11月01日  ·  13コメント  ·  ソース: restsharp/RestSharp

RestRequestへのファイルの追加が機能しないようです。

ResponseStatusはErrorとして設定されます。

response.Errorメッセージは、「ストリームに書き込まれるバイトが、指定されたContent-Lengthバイトサイズを超えています。」です。

ストリームに書き込む前に、コンテンツの長さを更新する必要があります。

bug

最も参考になるコメント

これは、このバグを回避するための私の解決策でした。

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

全てのコメント13件

.NETを回避するためのContent-Lengthの変更はファイルでテストされておらず、ヘッダーが正しく設定されていない可能性があります。 レポートをありがとう。

jonfullerの最新の変更を加えてこれを再試行し、それでも機能しないかどうかを教えてください

私はこれが解決されると信じています。 テストして、そうでない場合は通知してください。

問題が返されました。
バージョン105.2.3(現在はnugetで安定)では、ファイルのサイズは最大3.5MBです。

105.1.0にダウングレードした後は、すべて正常に機能します。

StackOverflowにも同様のはありません)。

これは別のバグ#769と#742に関連していると思います。修正して、どうなるか見てみましょう。 コンテンツの長さに問題が発生しました。

これについて何かニュースはありますか?

バンプ-まだ問題のようです

うん、私もこれに問題があります、105.1.0に戻っても助けにはなりませんでした

まだ解決されていません。

新しいバージョンのrestsharpでも同様の問題が発生しています
使用する場合
req.AddFile( "call [picture_attributes] [file]"、(s)=> imageStream.CopyTo(s)、GetRandomFileName( "jpg")、 "image / jpeg");

新しいバージョンでは機能しません

しかし、私が使用する場合
req.AddFile( "call [picture_attributes] [file]"、imageStream.GetBytes()、GetRandomFileName( "jpg")、 "image / jpeg");

    public static byte[] GetBytes(this Stream s)
    {
        using (var ms = new MemoryStream())
        {
            s.CopyTo(ms);
            return ms.ToArray();
        }
    }

できます。

したがって、imageStream.CopyToを使用してストリームを使用することは、byte []の送信中には機能しません。

これは、このバグを回避するための私の解決策でした。

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

RestRequest.AddFileは.NETCoreの準備ができていませんか? インターフェイスのAddFileメソッドの周りに#ifFRAMEWORKコンパイラ指令があるようです。 @bcabreraの回避策は私のユースケースでは単体テスト

.NETCoreのバージョンはまだありません。 進行状況を監視するには、未解決の問題を参照してください。

このページは役に立ちましたか?
0 / 5 - 0 評価