Проблема со страницей приложения Sharepoint 2010 - PullRequest
5 голосов
/ 18 марта 2011

Я относительно новичок в Sharepoint и использую версию 2010. У меня проблема со следующим кодом на странице приложения, которую я пытаюсь создать:

using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint.Utilities;

namespace SharePointProject5.Layouts.SharePointProject5
{
    public partial class ApplicationPage1 : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SPContext context = SPContext.Current;
            StringBuilder output = new StringBuilder();           

            using(SPSite site = context.Site)
            using (SPWeb web = site.AllWebs["BDC_SQL"])
            {
                UserProfileManager upmanager = new UserProfileManager(ServerContext.GetContext(site));
                string ListMgr = "";
                string ADMgr = "";

                bool allowUpdates = web.AllowUnsafeUpdates;
                web.AllowUnsafeUpdates = true;
                web.Update();

                SPListCollection listcollection = web.Lists;
                SPList list = listcollection["BDC_SQL"];
                foreach (SPListItem item in list.Items)
                {
                    output.AppendFormat("<br>From List - Name & manager: {0} , {1}", item["ADName"], item["Manager_ADName"]);
                    UserProfile uProfile = upmanager.GetUserProfile(item["ADName"].ToString());
                    output.AppendFormat("<br>From Prof - Name & manager: {0} , {1}", uProfile[PropertyConstants.DistinguishedName], uProfile[PropertyConstants.Manager]);

                    ListMgr = item["Manager_ADName"].ToString();
                    ADMgr = Convert.ToString(uProfile[PropertyConstants.Manager]);

                    if (ListMgr != ADMgr)
                    {
                        output.AppendFormat("<br>This record requires updating from {0} to {1}", uProfile[PropertyConstants.Manager], item["Manager_ADName"]);
                        uProfile[PropertyConstants.Manager].Value = ListMgr;

                        uProfile.Commit();

                        output.AppendFormat("<br>This record  has had its manager updated");
                    }
                    else
                    {
                        output.AppendFormat("<br>This record does not need to be updated");
                    }
                }

                web.AllowUnsafeUpdates = allowUpdates;
                web.Update();
            }

            Label1.Text = output.ToString();
        }

    }
}

Все работало нормально, пока я не добавилв 'uProfile.Commit ();'линия.Теперь я получаю следующее сообщение об ошибке:

Microsoft.SharePoint.SPException was unhandled by user code
  Message=Updates are currently disallowed on GET requests.  To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.
  Source=Microsoft.SharePoint
  ErrorCode=-2130243945
  NativeErrorMessage=FAILED hr detected (hr = 0x80004005)
  NativeStackTrace=""
  StackTrace:
       at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx)
       at Microsoft.SharePoint.Library.SPRequest.ValidateFormDigest(String bstrUrl, String bstrListName)
       at Microsoft.SharePoint.SPWeb.ValidateFormDigest()
       at Microsoft.Office.Server.UserProfiles.UserProfile.UpdateBlobProfile()
       at Microsoft.Office.Server.UserProfiles.UserProfile.Commit()
       at SharePointProject5.Layouts.SharePointProject5.ApplicationPage1.Page_Load(Object sender, EventArgs e)
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase.OnLoad(EventArgs e)
       at Microsoft.SharePoint.WebControls.LayoutsPageBase.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: System.Runtime.InteropServices.COMException
       Message=<nativehr>0x80004005</nativehr><nativestack></nativestack>Updates are currently disallowed on GET requests.  To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.
       Source=""
       ErrorCode=-2130243945
       StackTrace:
            at Microsoft.SharePoint.Library.SPRequestInternalClass.ValidateFormDigest(String bstrUrl, String bstrListName)
            at Microsoft.SharePoint.Library.SPRequest.ValidateFormDigest(String bstrUrl, String bstrListName)
       InnerException: 

Я попытался исправить это, добавив код, разрешающий небезопасные обновления, но я все еще получаю эту ошибку.

У кого-нибудь естьруководство для меня?Это будет высоко ценится.

Заранее спасибо,

Мэтт.

Ответы [ 3 ]

1 голос
/ 16 февраля 2012

Попробуйте также установить allowUnsafeUpdates для объекта сайта, он будет выглядеть примерно так:

site.AllowUnsafeUpdates = true;
UserProfileManager upmanager = new UserProfileManager(ServerContext.GetContext(site)); 

Я предполагаю, что UserProfileManager создает веб-объект вне сайта и наследует этот параметр в Интернетеон использует.
Я надеюсь, вы уже поняли это ...

1 голос
/ 19 марта 2011

Лучший шаблон для AllowUnsafeUpdates

web.AllowUnsafeUpdates = true;
web.Update(); //remove this line

или проверьте дайджест формы

http://hristopavlov.wordpress.com/2008/05/16/what-you-need-to-know-about-allowunsafeupdates/

0 голосов
/ 21 ноября 2013

Попробуйте дайджест-проверку страницы против SharePoint вместо включения небезопасных обновлений (не рекомендуется)

    protected override void OnInit(EventArgs e)
    {
        SPUtility.ValidateFormDigest();
        base.OnInit(e);
    }

Также попробуйте обновлять запросы POST, обновление по запросу GET также не является хорошей практикой и представляет угрозу безопасности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...