我在RunWithElevatedPrivileges下更新SharePoint publishWeb属性时遇到问题。它失败,但此行的“此页面的安全验证无效”:“pubWeb.IncludeInCurrentNavigation = false;”。下面是我正在尝试运行的代码。通常你可以设置AllowUnsafeUpdates = true,但是publishWeb没有这个特殊的属性。
我的问题是在提升的上下文中更新publishWeb属性的正确方法是什么?
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();
}
}
}
});
答案 0 :(得分:1)
如果在回发(POST)上发生此更改,则应在进行更改之前调用SPSecurity.ValidateFormDigest()
。 AllowUnsafeUpdates仅用于http GET请求。
如果是GET请求,我本来希望注释掉的行有效,但是由于它被评论我认为它没有。我建议你使用:
pubWeb.Web.AllowUnsafeUpdates = true
作为PublishingWeb
是SPWeb
实例的包装器,可以通过Web
属性访问。但这很奇怪,我原本期望提供的SPWeb
是同一个实例(因此你的注释行应该有效。)
答案 1 :(得分:1)
正在阅读有关使用此属性的内容
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();
}
}
}
});