1

我有一个共享点列表,我想在其中获取我的数据,但是当我尝试通过代码访问它时,它对我说“拒绝访问”并且使用“提升权限”我可以看到我有 614 个项目(通过使用 items.ItemCount 而不是项目.count )在其中,但是当我尝试获取它们时,我不能。

这是我正在使用的代码

SPSecurity.RunWithElevatedPrivileges(delegate()
{
  using(SPSite site = new SPSite("http://mysite/"))
  {
    using(SPWeb web = site.OpenWeb())
    {
    SPQuery query = new SPQuery();
    SPList list = web.Lists["mylist"];
    SPListItemCollection items = list.Items;
    for (int i = 0;i <list.ItemCount; i++)
    {
      Console.WriteLine(items[i].Name);
    }
    }
  }
});

我也尝试像这样使用 getitems(query)

SPListItemCollection items = list.GetItems(query);

结果是一样的。(请注意,该查询在 CAML Builder 中有效)

4

1 回答 1

1

SPSecurity.RunWithElevatedPrivileges 块中的代码在您的 Web 应用程序的应用程序池帐户下运行。此权限在大多数情况下应该足以克服所有安全限制。

在您的情况下,如果应用程序池帐户对该网站集没有任何权限,它将拒绝访问。我建议尝试像下面那样模拟网站集管理员,

SPUserToken token = oWeb.AllUsers["[AdministratorLoginName]"].UserToken;
using(SPSite site = new SPSite("http://mysite/",token))
  {
    using(SPWeb web = site.OpenWeb())
    {
    SPQuery query = new SPQuery();
    SPList list = web.Lists["mylist"];
    SPListItemCollection items = list.Items;
    for (int i = 0;i <list.ItemCount; i++)
    {
      Console.WriteLine(items[i].Name);
    }
    }
  }
于 2013-09-03T15:10:38.230 回答