Restsharp: ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ - ์ž˜๋ชป๋œ ์ฝ˜ํ…์ธ  ๊ธธ์ด

์— ๋งŒ๋“  2017๋…„ 03์›” 28์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: restsharp/RestSharp

์•ˆ๋…•,

v105.2.3์—์„œ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ 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);
    }
}

response2์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๋…์ผ์–ด๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ ์š”์ฒญ์ด ์ทจ์†Œ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.):
_Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen.._

๋‚ด๋ถ€ ์˜ˆ์™ธ(๋ชจ๋“  ๋ฐ”์ดํŠธ๊ฐ€ ๊ธฐ๋ก๋  ๋•Œ๊นŒ์ง€ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์„ ์ˆ˜ ์—†์Œ):
_Stream kann nicht geschlossen werden, bevor alle Bytes geschrieben wurden._

Fiddler์—์„œ ๋‚˜๋Š” ์ด๊ฒƒ์„ ์–ป์Šต๋‹ˆ๋‹ค.

์š”์ฒญ - ์—”ํ‹ฐํ‹ฐ

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

์‘๋‹ต

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

์ด ๋ฒ„์ „์ด ํ•„์š”ํ•œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€(์˜ˆ: RestSharp.Newtonsoft.Json)๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ Nuget ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/restsharp/RestSharp/issues/742

์นœ์• ํ•˜๋Š”,
์•Œ๋ ‰์Šค

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด AddFile() ๋Œ€์‹  request.Files.Add() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

                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
                });

๋ชจ๋“  3 ๋Œ“๊ธ€

์•ˆ๋…• ์•Œ๋ ‰์Šค,

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ–ˆ๊ฑฐ๋‚˜ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ?

์นœ์• ํ•˜๋Š”,
๋ชจ๋ฆฌ์ธ 

๋‚˜๋Š” ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด AddFile() ๋Œ€์‹  request.Files.Add() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

                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
                });

AddFile ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด์šฉ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ด์— ๋Œ€ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰