我有一个共享点列表,我想获取我的数据,但当我尝试通过代码访问它时,它告诉我“访问被拒绝”和“提升权限”我可以看到我有614项(通过使用项目。其中的ItemCount不是items.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(查询)
SPListItemCollection items = list.GetItems(query);
结果是一样的。 (请注意,查询在CAML Builder中有效)
答案 0 :(得分: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);
}
}
}