Restsharp: تحميل متعدد الأجزاء - طول محتوى خاطئ

تم إنشاؤها على ٢٨ مارس ٢٠١٧  ·  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);
    }
}

تحتوي الاستجابة 2 على رسالة الخطأ هذه (باللغة الألمانية وتعني إلغاء الطلب.):
_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

أحتاج إلى استخدام حزمة Nuget مع هذه الإصدارات لأن لدي حزم أخرى (مثل RestSharp.Newtonsoft.Json) تتطلب هذا الإصدار.
يبدو أن نفس المشكلة هنا:
https://github.com/restsharp/RestSharp/issues/742

مع أطيب التحيات،
اليكس

التعليق الأكثر فائدة

واجهت نفس المشكلة وقمت بحلها باستخدام طريقة request.Files.Add () بدلاً من AddFile () مثل:

                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 كومينتر

مرحبا اليكس ،

لدي نفس المشكلة. هل قمت بحلها أو عملت حولها؟

مع أطيب التحيات،
موريس

واجهت نفس المشكلة وقمت بحلها باستخدام طريقة request.Files.Add () بدلاً من AddFile () مثل:

                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 التقييمات