« Les mises à jour sont actuellement refusées sur les requêtes GET » erreur la création d'une collection de sites
-
16-10-2019 - |
Question
J'utilise SharePoint Server 2007 Enterprise avec Windows Server 2008 Enterprise. J'ai déployé un portail d'édition. Je développe une application web ASP.Net utilisant VSTS 2008 + C # .Net + 3.5 + ASP.Net + SharePoint Server SDK 2007.
Voici mes extraits de code et je me suis erreur - « Les mises à jour sont actuellement sur les demandes de déduction est refusée GET ». Toute idée comment fixer?
Microsoft.SharePoint.SPException: Updates are currently disallowed on GET requests. To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.
protected void Page_Load(object sender, EventArgs e)
{
try
{
SPWebApplication webApp = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApp.Sites;
foreach (SPSite item in siteCollections)
{
SPWeb webItem = item.OpenWeb();
webItem.AllowUnsafeUpdates = true;
}
SPSite newSiteCollection = siteCollections.Add("sites/myblog",
"New Sample Site", "New Sample Site Description", 1033, "BLOG#0",
"foo\\foouser", "Owner name", "owneremail@foo.com");
}
catch (Exception ex)
{
Response.Write(ex.ToString() + "\t" + ex.StackTrace);
}
}
Mise à jour 1: J'ai rencontré la même erreur avec le code suivant,
SPContext.Current.Web.AllowUnsafeUpdates = true;
SPWebApplication webApp = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApp.Sites;
/*
foreach (SPSite item in siteCollections)
{
SPWeb webItem = item.OpenWeb();
webItem.AllowUnsafeUpdates = true;
}
*/
SPSite newSiteCollection = siteCollections.Add("sites/myblog",
"New Sample Site", "New Sample Site Description", 1033, "BLOG#0",
"foo\\foouser", "Owner name", "owneremail@foo.com");
La solution
Sachez que SPSite a également une propriété AllowUnsafeUpdates que vous pouvez essayer.
Si vous modifiez ce, faites-le dans un try / finally de sorte que vous êtes sûr de ne pas rendre votre site vounerable aux attaques de script côté cross (il semblerait à partir de votre exemple de code que vous avez déjà contourné la protection XSS de tous vos sous-sites, vous pouvez activer à nouveau ça!).
Finalement, la propriété AllowUnsafeUpdates sera remis à sa valeur par défaut (toute opération qui appel SPWeb.Invalidate () entre autres), mais en attendant votre site sera sujette à des attaques XSS.
Autres conseils
Je pense que vous devez définir AllowUnsafeUpdates
sur le Web qui invoque ce code.
bool currentSetting = SPContext.Current.Web.AllowUnsafeUpdates;
SPContext.Current.Web.AllowUnsafeUpdates = true;
... do your work here
SPContext.Current.Web.AllowUnsafeUpdates = currentSetting;
Si vous voulez vraiment faire cela avec un GET-demande, l'exécution 'SPUtility.ValidateFormDigest () devrait également faire l'affaire, sans avoir besoin de toucher la propriété AllowUnsafeUpdates (qui est vraiment quelque chose que vous devriez éviter, à mon avis)