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

aはインスタンスPublishingWebのラッパーであり、プロパティを介してアクセスできます。奇妙ですが、提供されたものが同じインスタンスであると予想していました(したがって、コメント行は機能するはずです)。SPWebWebSPWeb

于 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 に答える