يقوم SaveBinaryDirect بإلقاء أمر غير مصرح به عندما يعمل نموذج كائن العميل بشكل جيد

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/70562

سؤال

لقد قررت استخدام طريقة SaveBinaryDirect لتحميل المستندات إلى موقع Sharepoint نظرًا لعدم وجود قيود على حجم الطلب/الملف الموجودة في نموذج كائن العميل.

يقوم التطبيق بأمرين، إضافة مجلد (باستخدام نموذج كائن العميل) ثم تحميل ملف محدد إلى المجلد الذي أنشأه للتو (باستخدام Save Binary Direct).

هذا يعمل بشكل جيد على الإعداد الخاص بي هنا.ولكن في موقع عملائنا، تم إنشاء المجلد بشكل جيد ولكن جزء تحميل الملف يعرض الخطأ "غير مصرح به 401".

            SP.ClientContext ctx = new SP.ClientContext(siteurl);
            SP.Web currentWeb = ctx.Web;
            //Pass user details from config (That has owner permissions)
            ctx.Credentials = new NetworkCredential(username, password, domain);   
            //create folder method (checks if the folder exists and creates using Client Object Model)
            CreateFolder(ctx,libraryUrl,folderName)

            //Save Binary Direct Method
            string fileUrl = "/"+ libraryname + "/" + folderName + "/" + fileName;
            using (data)
            {
                //upload by passing the context, file url, file data stream, 
                //set overwrite to true
                SP.File.SaveBinaryDirect(ctx, fileUrl,data, true);
            }

وهذا يجعلني أفكر في أحد أمرين

  1. يوجد إعداد يجب تغييره على نقطة المشاركة أو خادم الويب فيما يتعلق بالتفويض/المصادقة.
  2. الطريقة التي أستخدم بها بيانات اعتماد الشبكة غير صحيحة.لأنه يفعل ذلك فقط لنموذج كائن العميل ولكن ليس للحفظ الثنائي المباشر.

أدرك أننا قادرون على استخدام نموذج كائن العميل، وقد نحتاج إلى إجراء إصدار آخر إذا لم تكن مشكلة التكوين/الإعداد.

هل لدى أي شخص لديه خبرة أكبر في هذا بعض الأفكار حول سبب القيام بذلك؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم SharePoint 2013، فلا يمكنك استخدام SaveBinaryDirect، فلا تعمل مع مصادقة المطالبات.لا تتضمن المكالمة التي تصنعها SaveBinaryDirect ملفات تعريف الارتباط الترخيص المطلوبة.يتم مناقشة التفاصيل في التعليقات على مشاركة هذه المدونة: كيفية القيام المصادقة النشطة إلى Office 365 و SharePoint Online

تحديث (2 يوليو 2016):

أخذت نظرة أخرى على هذا بعد رؤية تعليق جيمس الحب.لست متأكدا من تغيير ولكن يشير الاختبار إلى أن SaveBinaryDirect يعمل الآن مع SharePoint 2013 و SharePoint Online.

إليك الرمز الذي استخدمته: giveacodicetagpre.

نصائح أخرى

جرب هذا: giveacodicetagpre.

أنا قادر على تحميل ملف من نظام الملفات إلى SharePoint 2010 باستخدام نموذج كائن العميل.

إذا كنت تحصل على 401 غير مصرح به بعد ذلك، فتأكد من أنك تقدم بيانات الاعتماد الصحيحة وعناوين URL النسبية الصحيحة للمجلد Target SharePoint Document Library. giveacodicetagpre.

أعتقد أنه يجب عليك إضافة هذا: giveacodicetagpre.

واجهت نفس المشكلة، ووجدت حلا على الرغم من أنني لا أعرف ما إذا كان شرعيا. giveacodicetagpre.

تلدر:تحتاج إلى استخدام الخادم عنوان URL النسبي، على الرغم من أن السياق يتضمن معلومات الموقع.

لقد واجهت نفس المشكلة وتم حلها باستخدام Fiddler.عندما استخدمت نموذج كائن العميل، قمت بإنشاء السياق باستخدام مسار الموقع، أي."https://server/sites/siteName"، ثم

var docs = web.Lists.GetByTitle(documentLibraryName);
SP.File uploadFile = docs.RootFolder.Files.Add(newFile);
context.Load(uploadFile);
context.ExecuteQuery();

أدى هذا إلى وظيفة ل https://<server>/sites/<siteName>/_vti_bin/client.svc/ProcessQueryتم تضمين المسار واسم الملف (والمحتوى) في ملف XML بواسطة CSOM.

الآن، SP.File.SaveBinaryDirect التوقيع هو SaveBinaryDirect(ClientContext context, string serverRelativeUrl, Stream stream, bool overwriteIfExists) - ولكن الطلب SaveBinaryDirect(context, "/<library>/<folder>/filename", stream, true) فشل مع خطأ 401.ابحث في Fiddler، وهنا الطلب المقدم:

PUT https://<server>/<library>/<filename>

على الرغم من السياق يشمل الموقع، عليك أن تعطيه المسار كله من جذر الخادم.كانت المكالمة ناجحة

SaveBinaryDirect(context, "/sites/<sitename>/<library>/<folder>/filename", stream, true)

وينتج عن ذلك وضع PUT في الموقع الصحيح.المعلمة يكون مُسَمًّى serverRelativeUrl بعد كل ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top