1

ファーム ソリューションとして展開したカスタム SharePoint Web パーツがあり、SharePoint リストへの書き込みに問題があります。AllowUnsafeUpdates を (さまざまな場所で) True に設定し、SPListItem update を呼び出す前に SPWeb オブジェクトを更新しているにもかかわらず、プログラムでリストに書き込むときに次のようなエラー メッセージが表示されます。

現在、GET リクエストでの更新は許可されていません。GET での更新を許可するには、SPWeb で 'AllowUnsafeUpdates' プロパティを設定します。

RunWithElevatedPrivileges も使用してみましたが、うまくいきませんでした。

参照用の私のコードは次のとおりです。

        public void WriteError(string errorTask, string errorMessage)
        {
            string task = "Error Log Entry";
            string fileName = "";
            string fileTitle = "";
            string fileType = "";

                using (SPSite oSiteCollection = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb oWebsite = oSiteCollection.RootWeb)
                    {
                        oSiteCollection.AllowUnsafeUpdates = true;
                        oWebsite.AllowUnsafeUpdates = true;
                        oWebsite.Update();

                        SPSite errorLogSite = new SPSite(oWebsite.ServerRelativeUrl);
                        SPListItemCollection oList = errorLogSite.RootWeb.Lists["ErrorLog"].Items;

                        SPListItem oItem = oList.Add();
                        oItem["ErrorTask"] = task + ": " + errorTask;
                        oItem["ErrorMessage"] = errorMessage;
                        oItem["UserName"] = String.IsNullOrEmpty(UserName) ? "Not Available" : UserName;
                        oItem["FileName"] = String.IsNullOrEmpty(fileName) ? "Not Available" : fileName;
                        oItem["Title"] = String.IsNullOrEmpty(fileTitle) ? "Not Available" : fileTitle;
                        oItem["FileType"] = String.IsNullOrEmpty(fileType) ? "Not Available" : fileType;

                        oItem.Update();
                    }
                }

        }
4

2 に答える 2

3

SPWebのAllowUnsafeUpdatesプロパティの目的を完全に理解していないようです。SPListインスタンスの取得に使用しているSPWebインスタンスでtrueに設定する必要があります。また、パフォーマンスを低下させる可能性があるため、SPSiteおよびSPWebのインスタンスを大量に作成する理由はありません。あなたの場合は次のコードを試してください

public void WriteError(string errorTask, string errorMessage)
        {
            string task = "Error Log Entry";
            string fileName = "";
            string fileTitle = "";
            string fileType = "";

            var errorLogWeb = SPContext.Current.Site.RootWeb;
            errorLogWeb.AllowUnsafeUpdates = true;
            var errorLogList = errorLogWeb.Lists["ErrorLog"];
            SPListItem oItem = errorLogList.Items.Add();
            oItem["ErrorTask"] = task + ": " + errorTask;
            oItem["ErrorMessage"] = errorMessage;
            oItem["UserName"] = String.IsNullOrEmpty(UserName) ? "Not Available" : UserName;
            oItem["FileName"] = String.IsNullOrEmpty(fileName) ? "Not Available" : fileName;
            oItem["Title"] = String.IsNullOrEmpty(fileTitle) ? "Not Available" : fileTitle;
            oItem["FileType"] = String.IsNullOrEmpty(fileType) ? "Not Available" : fileType;

            oItem.Update();
        }
于 2012-12-11T08:18:10.150 に答える
0

あなたがやっている友達

 oSiteCollection.AllowUnsafeUpdates = true;
 oWebsite.AllowUnsafeUpdates = true;

ただし、それらを次のように設定することはありません。

  oSiteCollection.AllowUnsafeUpdates = false;
  oWebsite.AllowUnsafeUpdates = false;

また、もう 1 つやってはいけないことがありoSiteCollection.AllowUnsafeUpdates = false;ます。

このコードを試して、

    public void WriteError(string errorTask, string errorMessage)
            {
                string task = "Error Log Entry";
                string fileName = "";
                string fileTitle = "";
                string fileType = "";

                    using (SPSite oSiteCollection = new SPSite(SPContext.Current.Web.Url))
                    {
                        using (SPWeb oWebsite = oSiteCollection.RootWeb)
                        {                           
                            oWebsite.AllowUnsafeUpdates = true;               

                            SPSite errorLogSite = new SPSite(oWebsite.ServerRelativeUrl);
                            SPListItemCollection oList = errorLogSite.RootWeb.Lists["ErrorLog"].Items;

                            SPListItem oItem = oList.Add();
                            oItem["ErrorTask"] = task + ": " + errorTask;
                            oItem["ErrorMessage"] = errorMessage;
                            oItem["UserName"] = String.IsNullOrEmpty(UserName) ? "Not Available" : UserName;
                            oItem["FileName"] = String.IsNullOrEmpty(fileName) ? "Not Available" : fileName;
                            oItem["Title"] = String.IsNullOrEmpty(fileTitle) ? "Not Available" : fileTitle;
                            oItem["FileType"] = String.IsNullOrEmpty(fileType) ? "Not Available" : fileType;

                            oItem.Update();
                            oWebsite.Update();
                            oWebsite.AllowUnsafeUpdates = false;
                        }
                    }

            }
于 2012-12-15T12:23:26.863 に答える