2

我在更新 RunWithElevatedPrivileges 下的 SharePoint publishingWeb 属性时遇到问题。它失败,在此行出现异常“此页面的安全验证无效”:“pubWeb.IncludeInCurrentNavigation = false;”。下面是我试图运行的代码。通常你可以设置 AllowUnsafeUpdates = 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();
                        }
                    }
                }
            });
4

2 回答 2

1

如果此更改发生在回发(POST)上,您应该SPSecurity.ValidateFormDigest()在进行更改之前致电。AllowUnsafeUpdates 仅用于 http GET 请求。

如果它是一个 GET 请求,我原以为注释掉的行会起作用,但由于它被注释了,我认为它没有。我建议你使用:

pubWeb.Web.AllowUnsafeUpdates = true

as aPublishingWebSPWeb实例的包装器,可通过Web属性访问。不过很奇怪,我原以为提供SPWeb的实例是同一个实例(因此,您的注释行应该有效。)

于 2010-09-06T18:31:17.777 回答
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();
                            }
                        }
                    }
                });
于 2010-09-07T19:00:20.640 回答