فشل تغيير SharePoint PublishingWeb في ظل سياق الأمان المرتفع ، لماذا؟
-
26-09-2019 - |
سؤال
أواجه مشكلة في تحديث سمة نشر SharePoint في ظل RunwitheLevatedPrivileges. يفشل باستثناء "التحقق من صحة الأمان لهذه الصفحة غير صالح" في هذا السطر: "pubWeb.includeincurrentNavigation = false ؛". فيما يلي الرمز الذي أحاول تشغيله. في العادة ، يمكنك تعيين lemtunsafeupdates = true ، لكن PublishingWeb ليس لديها هذه الخاصية الخاصة.
سؤالي هو ما هي الطريقة الصحيحة لتحديث سمات publishingweb في سياق مرتفع؟
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(parentSiteUrl))
{
//siteCollection.AllowUnsafeUpdates = true;
using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
{
//web.AllowUnsafeUpdates = true;
if (PublishingWeb.IsPublishingWeb(web))
{
// hide new sub-site from navigation elements.
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
pubWeb.IncludeInCurrentNavigation = false;
pubWeb.IncludeInGlobalNavigation = false;
pubWeb.Update();
}
}
}
});
المحلول
إذا حدث هذا التغيير في Postback (منشور) ، فيجب أن تتصل SPSecurity.ValidateFormDigest()
قبل إجراء التغيير. لا يتم استخدام LoomunsafeUpdates إلا لطلبات HTTP Get.
إذا كان هذا طلبًا ، كنت أتوقع أن يكون خط التعليق قد نجح ، لكن بما أنه تم التعليق ، فأنا أفترض أنه لم يفعل ذلك. أود أن أقترح عليك استخدام:
pubWeb.Web.AllowUnsafeUpdates = true
ك PublishingWeb
هو غلاف ل SPWeb
مثيل ، والذي يمكن الوصول إليه عبر Web
منشأه. إنه أمر غريب رغم أنني كنت أتوقع توفيره SPWeb
أن تكون نفس الحالة (وعلى هذا النحو ، كان ينبغي أن يعمل خطك المعلق.)
نصائح أخرى
كان يقرأ قليلاً عن استخدام هذه الخاصية
pubWeb.Navigation.ExcludeFromNavigation (true ، web.id) ؛
بدلاً من
pubWeb.includeincurrentNavigation = false ؛
pubWeb.includeingLobalNavigation = false ؛
لست متأكدًا مما إذا كان هذا مناسبًا لما تحاول تحقيقه.
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(parentSiteUrl))
{
//siteCollection.AllowUnsafeUpdates = true;
using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
{
//web.AllowUnsafeUpdates = true;
if (PublishingWeb.IsPublishingWeb(web))
{
// hide new sub-site from navigation elements.
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
pubWeb.Navigation.ExcludeFromNavigation(true, web.ID);
pubWeb.Update();
}
}
}
});