0

条件付きでSharepointリストを作成するための次のようなコードがあります(一種のアップサート):

private void ConditionallyCreateList()
{
    SPWeb site = SPContext.Current.Web;
    // Check to see if list already exists; if so, exit
    if (site.Lists.TryGetList(listTitle) != null) return;

    SPListCollection lists = site.Lists;
    SPListTemplateType listTemplateType = new SPListTemplateType();
    listTemplateType = SPListTemplateType.GenericList;
    string listDescription = "This list retains vals inputted for the Post Travel form";
    Guid ListId = lists.Add(listTitle, listDescription, listTemplateType);
    . . .

これは、アプリの最初の作成時とその後の実行時に機能しました。

ただし、リスト構造に根本的なリファクタリングを行い、古いリストを削除したので、新しい構造の新しいリストが作成されることを願っていました。ただし、リファクタリングされたリストを取得する代わりに、上記の最後の行でこれを取得しました。

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.

示されたコードを追加することで、これを解決できました。

site.AllowUnsafeUpdates = true;

...しかし、なぜこれが必要なのでしょうか? もう存在しないはずのリスト (Sharepoint の「すべてのサイト コンテンツ」バザーから削除した) の作成に問題があるのはなぜですか (潜在的に「安全でない更新」)?

4

1 に答える 1

1

XSS やセッション ハイジャックなどから自身を保護するために、SharePoint サイトへのほとんどの更新は、ユーザーが変更を行ったのと同じページに埋め込まれたフォーム ダイジェスト コントロールに関連付けられています。更新がトリガーされたときにそのフォーム ダイジェスト コントロールからの情報が存在しない場合、SharePoint は最悪の事態を想定します。これは、サーバー側のコードが昇格された特権で実行される可能性がある場合に特に重要です。

お気づきのとおり、変更を行う直前にSPWeb オブジェクトのAllowUnsafeUpdatesプロパティをに切り替えることで、これを簡単に回避できます。true

于 2015-10-21T02:26:26.200 に答える