Restsharp: Envio de várias partes - comprimento de conteúdo incorreto

Criado em 28 mar. 2017  ·  3Comentários  ·  Fonte: restsharp/RestSharp

Oi,

Estou tentando fazer o upload de várias partes funcionar com a v105.2.3, mas parece que há algo errado com o Content-Length.

using (FileStream source = File.Open(path, FileMode.Open))
{
    RestSharp.RestRequest request2 = new RestSharp.RestRequest();
    request.Resource = $"/files/uploads/{UploadId}";
    request.Method = Method.POST;
    request.AddFile(filename, source.CopyTo, filename);
    request.AlwaysMultipartFormData = true;

    IRestResponse<UploadResponse> response2 = this.Client.Execute<UploadResponse>(request);
    if ((int)response2.StatusCode != 201)
    {
        throw new Exception(response2.StatusDescription);
    }
}

O response2 tem esta mensagem de erro (está em alemão e significa que a solicitação foi cancelada):
_Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen .._

Exceção interna (não é possível fechar o fluxo até que todos os bytes sejam gravados):
_Stream kann nicht geschlossen werden, bevor alle Bytes geschrieben wurden._

No Fiddler, recebo o seguinte:

Pedido - Entidade

Content-Length: 210
Content-Type: multipart/form-data; boundary=-----------------------------28947758029299

Resposta

HTTP/1.1 408 Request body incomplete
The request body did not contain the specified number of bytes. Got 159, expected 210

Preciso usar o pacote Nuget com esta versão, pois tenho outros pacotes (como RestSharp.Newtonsoft.Json) que requerem esta versão.
Parece o mesmo problema aqui:
https://github.com/restsharp/RestSharp/issues/742

Atenciosamente,
Alex

Comentários muito úteis

Eu tive o mesmo problema e resolvi usando o método request.Files.Add () em vez de AddFile () assim:

                request.Files.Add(new FileParameter
                {
                    Name = "fileAttach",
                    Writer = (s) =>
                    {
                        FileStream stream = File.Open(_attachment.path, FileMode.Open);
                        stream.CopyTo(s);
                        stream.Dispose();
                    },
                    FileName = _attachment.name,
                    ContentType = _attachment.contentType,
                    ContentLength = _attachment.size
                });

Todos 3 comentários

Oi Alex,

Eu tenho o mesmo problema. Você resolveu ou trabalhou ao redor?

Atenciosamente,
Maurice

Eu tive o mesmo problema e resolvi usando o método request.Files.Add () em vez de AddFile () assim:

                request.Files.Add(new FileParameter
                {
                    Name = "fileAttach",
                    Writer = (s) =>
                    {
                        FileStream stream = File.Open(_attachment.path, FileMode.Open);
                        stream.CopyTo(s);
                        stream.Dispose();
                    },
                    FileName = _attachment.name,
                    ContentType = _attachment.contentType,
                    ContentLength = _attachment.size
                });

Você pode usar AddFile mas você precisa especificar o comprimento do conteúdo, há um parâmetro para isso.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ChenJasonGit picture ChenJasonGit  ·  5Comentários

nilsga picture nilsga  ·  5Comentários

guevelamax15000 picture guevelamax15000  ·  3Comentários

tomgallard picture tomgallard  ·  6Comentários

captnrob picture captnrob  ·  3Comentários