У меня есть существующий документ в библиотеке документов, и я пытаюсь перезаписать этот файл в коде, используя такой код:
byte[] data = ...
SPListItem li = ...
li.File.SaveBinary(data);
Когда я запускаю этот код, я получаю:
Microsoft.SharePoint.SPException: The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again. ---> System.Runtime.InteropServices.COMException (0x8102006D): The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.
at Microsoft.SharePoint.Library.SPRequestInternalClass.PutFile(String bstrUrl, String bstrWebRelativeUrl, Object varFile, PutFileOpt PutFileOpt, String bstrCreatedBy, String bstrModifiedBy, Int32 iCreatedByID, Int32 iModifiedByID, Object varTimeCreated, Object varTimeLastModified, Object varProperties, String bstrCheckinComment, UInt32& pdwVirusCheckStatus, String& pVirusCheckMessage)
at Microsoft.SharePoint.Library.SPRequest.PutFile(String bstrUrl, String bstrWebRelativeUrl, Object varFile, PutFileOpt PutFileOpt, String bstrCreatedBy, String bstrModifiedBy, Int32 iCreatedByID, Int32 iModifiedByID, Object varTimeCreated, Object varTimeLastModified, Object varProperties, String bstrCheckinComment, UInt32& pdwVirusCheckStatus, String& pVirusCheckMessage)
--- End of inner exception stack trace ---
at Microsoft.SharePoint.Library.SPRequest.PutFile(String bstrUrl, String bstrWebRelativeUrl, Object varFile, PutFileOpt PutFileOpt, String bstrCreatedBy, String bstrModifiedBy, Int32 iCreatedByID, Int32 iModifiedByID, Object varTimeCreated, Object varTimeLastModified, Object varProperties, String bstrCheckinComment, UInt32& pdwVirusCheckStatus, String& pVirusCheckMessage)
at Microsoft.SharePoint.SPFile.SaveBinary(Byte[] file, String checkInComment, Boolean checkRequiredFields, Boolean bIsMigrate, Boolean bIsPublish, SPUser modifiedBy, DateTime timeLastModified, SPVirusCheckStatus& virusCheckStatus, String& virusCheckMessage)
at Microsoft.SharePoint.SPFile.SaveBinary(Byte[] file, Boolean checkRequiredFields, Boolean bIsMigrate, Boolean bIsPublish, SPUser modifiedBy, DateTime timeLastModified)
at Microsoft.SharePoint.SPFile.SaveBinary(Byte[] file, Boolean checkRequiredFields)
at Microsoft.SharePoint.SPFile.SaveBinary(Byte[] file)
at TestClass.UploadFile()
Я запускаю этот код в форме, размещенной на том же сайте, что и sharepoint, и пользователь, который запускает код, может загрузить файл вручную. Мне нужно сначала удалить файл? Проверить это?





Я понял. Я выполнял вызов в блоке SPSecurity.RunWithElevatedPrivileges, что привело к его сбою. Я нахожу это интересным, поскольку вы могли подумать, что работа с повышенными привилегиями даст больше доступа, а не меньше.
Попробуйте это исправить:
SPSecurity.RunWithElevatedPrivileges(delegate
{
using (SPSite elevSite = new SPSite(currentWeb.Site.ID))
{
using (SPWeb elevWeb = elevSite.OpenWeb(currentWeb.ID))
{
elevWeb.AllowUnsafeUpdates = true;
// ...
}
}
}
Попробуйте это также, чтобы удалить ошибку «Проверка безопасности для этой страницы недействительна. Нажмите« Назад »в веб-браузере, обновите страницу и повторите попытку».
Спасибо,
Проблема заключается в недостатке дизайна в SharePoint. Он проверяет дайджест формы при первом использовании в запросе. Среди элементов дайджеста формы - идентификатор пользователя. Теперь, когда вы повышены, идентификатор пользователя меняется на sharepoint \ system, который больше не совпадает, и вызывает ошибку. Этого можно избежать, вызвав SPUtility.ValidateFormDigest () перед повышением.