SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




'AllowUnsafeUpdates' property on SPWeb - Bitte dringend um Hilfe!

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
37 Beiträge
Chris 22 erstellt 7 Sept. 2010 12:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi all,

 

seit zwei Tage suche ich ohne Erfolg nach einer Lösung für ein Update, welches wegen - Updates are currently disallowed on GET requests.  To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb. - nicht durchgeführt werden kann. Meine Vermutung ist, dass der Fehler etwas mit dem ausgeführten Kontext zu tun haben könnte. Mir fehlt jedoch das nötige Know-How um den Fehler eingrenzen zu können.

 

Wäre für jede Hilfe dankbar!

 

Vielen Dank im Voraus.

 

 

In folgender Funktion tritt der Fehler (an Stelle roleAssignments.Add(roleAssignment);) auf:

 

//create role deinition for the customer

public void DefineCustomerRole()

{

SPSecurity.RunWithElevatedPrivileges(delegate()

{

using (SPSite spSite = this.GetSetCurrentSite)

{

using (SPWeb spWeb = this.GetSetCurrentWeb)

{

// Break permission level inheritance if exists, than set new permissions

if (!spWeb.HasUniqueRoleDefinitions)

spWeb.RoleDefinitions.BreakInheritance(true, true);

 

string CustomGroupName = this.GetSetCustomGroupName;

SPRoleDefinitionCollection roleCollection = spWeb.RoleDefinitions;

SPRoleAssignmentCollection roleAssignments = spWeb.RoleAssignments;

SPWeb spWebRoot = spWeb.Site.RootWeb;

spWeb.Update();

spWebRoot.AllowUnsafeUpdates = true;

spSite.AllowUnsafeUpdates = true;

SPWebApplication webApp = spWeb.Site.WebApplication;

webApp.FormDigestSettings.Enabled = false;

spWeb.AllowUnsafeUpdates = true;

spWeb.Update();

spWebRoot.Update();

 

//Cteate new permission level of single permissions

SPRoleDefinition customerPermissionLevel = new SPRoleDefinition();

customerPermissionLevel.Name = "CustomerViewOnly";

customerPermissionLevel.Description = "Berechtigungsstufe der externen Kundenzugriffe";

customerPermissionLevel.BasePermissions = SPBasePermissions.CreateAlerts |

SPBasePermissions.ViewListItems |

SPBasePermissions.ViewPages |

SPBasePermissions.CancelCheckout |

SPBasePermissions.EditMyUserInfo |

SPBasePermissions.ViewFormPages;

 

string tmpName = customerPermissionLevel.Name;

bool tmpRoleExist = false;

foreach (SPRoleDefinition roleDefinition in roleCollection)

{

if (tmpName == roleDefinition.Name)

{

tmpRoleExist = true;

}

}

 

if (!tmpRoleExist)

{

spWeb.RoleDefinitions.Add(customerPermissionLevel);

customerPermissionLevel.Update();

}

 

//assigne role to the customer group

SPGroup customerGroup = createCustomGroup(CustomGroupName);

SPRoleAssignment roleAssignment = new SPRoleAssignment(customerGroup);

SPRoleDefinitionBindingCollection roleDefinitionBindings = roleAssignment.RoleDefinitionBindings;

roleDefinitionBindings.Add(roleCollection["CustomerViewOnly"]);

//Add the new role assignment to the collection of role assignments for the site.

roleAssignments.Add(roleAssignment); //Hier wird die Exception geworfen

spWeb.AllowUnsafeUpdates = false;

spWeb.Update();

}

}

});

}

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Sept. 2010 14:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Deinen Code habe ich jetzt nicht durchgesehen, aber die Fehlermeldung ist doch sehr aussagekräftig. Setze einfach AllowUnsafeUpdates gleich true bei Deinem SPWeb-Objekt. Um sicher zu gehen gleich ganz am Anfang.

Wenn Du es richtig machen möchtest, dann merke Dir vorher den alten Wert und setze ihne danach wieder:

bool allow = web.AllowUnsafeUpdates;
web.AllowUnsafeUpdates = true;
// mache irgendwas mit dem web-Objekt
web.AllowUnsafeUpdates = allow;

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
37 Beiträge
Chris 22 Als Antwort am 7 Sept. 2010 16:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@ Andi  - Danke, dass du dir meinen Code nicht durchgesehen hast. :)

Mittlerweile funktioniert es. Ich habe die relevanten Zeilen direkt vor das roleAssignments.Add gesetzt:

SPWeb spWebRoot = spWeb.Site.RootWeb;

spWeb.Update();

spWebRoot.AllowUnsafeUpdates = true;

spSite.AllowUnsafeUpdates = true;

SPWebApplication webApp = spWeb.Site.WebApplication;

webApp.FormDigestSettings.Enabled = false;

spWeb.AllowUnsafeUpdates = true;

spWeb.Update();

spWebRoot.Update();

roleAssignments.Add(roleAssignment);

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Sept. 2010 17:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Chris 22"]Danke, dass du dir meinen Code nicht durchgesehen hast. :)[/quote]

War mir einfach zu viel ;-)

Aber einige Anmerkungen:

[quote user="Chris 22"] SPWeb spWebRoot = spWeb.Site.RootWeb;
spWeb.Update();[/quote]

Wozu das Update? Das Web ist doch noch unverändert.

[quote user="Chris 22"]spSite.AllowUnsafeUpdates = true;[/quote]

Brauchst Du nicht. Beim Web reicht es.

[quote user="Chris 22"] SPWebApplication webApp = spWeb.Site.WebApplication;
webApp.FormDigestSettings.Enabled = false;[/quote]

Was versprichst Du Dir davon?

 

Viele Grüße
Andi
af @ evocom de
Blog