Restsharp: RestRequest.AddFile لا يعمل

تم إنشاؤها على ١ نوفمبر ٢٠١٠  ·  13تعليقات  ·  مصدر: restsharp/RestSharp

يبدو أن إضافة ملف إلى RestRequest لا يعمل.

تم تعيين ResponseStatus على أنها خطأ.

رسالة response.Error هي "تتجاوز البايت المراد كتابتها إلى الدفق حجم بايت طول المحتوى المحدد."

يجب تحديث طول المحتوى قبل الكتابة إلى البث.

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 مع الملفات ولم يتم تعيين الرأس بشكل صحيح. شكرا للتقرير.

جرب هذا مرة أخرى مع أحدث تغييرات jonfuller وأخبرني ما إذا كان لا يزال لا يعمل

أعتقد أن هذا سيحل. يرجى الاختبار والإخطار إذا لم يكن كذلك.

عادت المشكلة.
في الإصدار 105.2.3 (مستقر حاليًا على nuget) بحجم ملف ~ 3.5 ميغابايت.

بعد التخفيض إلى 105.1.0 كل شيء يعمل بشكل جيد.

هناك وظيفة مماثلة

أعتقد أن هذا مرتبط بخلل آخر # 769 و # 742 دعني أصلح ذلك وسنرى ما سيحدث. حدث شيء ما بطول المحتوى.

هل هناك أي أخبار عن هذا؟

نتوء - يبدو أنه لا يزال يمثل مشكلة

نعم ، لدي مشاكل مع هذا أيضًا ، حتى العودة إلى 105.1.0 لم تساعد

لم تحل بعد.

أواجه مشكلة مماثلة مع الإصدارات الأحدث من restsharp
عند الاستخدام
req.AddFile ("call [picture_attributes] [ملف]" ، (s) => imageStream.CopyTo (s) ، GetRandomFileName ("jpg") ، "image / jpeg") ؛

لا يعمل في الإصدارات الأحدث

ولكن إذا كنت أستخدم
req.AddFile ("call [picture_attributes] [ملف]" ، 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 لا يعمل أثناء إرسال أعمال البايت []

كان هذا هو الحل الخاص بي للتغلب على هذا الخطأ:

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 غير جاهز لـ .NET Core؟ أرى أن هناك توجيه مترجم #if FRAMEWORK حول أساليب AddFile على الواجهة. أعتقد أن حل bcabrera يمكن أن يعمل مع حالة الاستخدام الخاصة بي ولكن اختبار الوحدة سيكون تحديًا.

لا يوجد إصدار لـ .NET Core حتى الآن. انظر القضايا المفتوحة لمراقبة التقدم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات