.net Sharepoint OpenWeb()未登录时返回null

.net Sharepoint OpenWeb()未登录时返回null,.net,sharepoint,web-parts,.net,Sharepoint,Web Parts,我有一个SP Web部件,它从数据表中提取数据并显示格式化的数据。此web部件的大多数实例都可以正常工作,但此特定实例在调用时返回null。但是,如果我登录到该站点(而不是anon),Web部件将返回列表。真奇怪。我检查了所有涉及的web对象,它们都继承自父对象,不需要登录即可查看 下面是一段代码片段:(请记住,我继承了这段代码,它绝对不是“好的”) publicstaticdatatable GetDataTableFromSPList(stringweburl、stringlistname、

我有一个SP Web部件,它从数据表中提取数据并显示格式化的数据。此web部件的大多数实例都可以正常工作,但此特定实例在调用时返回null。但是,如果我登录到该站点(而不是anon),Web部件将返回列表。真奇怪。我检查了所有涉及的web对象,它们都继承自父对象,不需要登录即可查看

下面是一段代码片段:(请记住,我继承了这段代码,它绝对不是“好的”)

publicstaticdatatable GetDataTableFromSPList(stringweburl、stringlistname、Int32 numToReturn、stringsortcol、stringascend)
{
SPListItemCollection coll=null;
数据表dt=null;
字符串siteUrl=GetUrlPrefix();
使用(SPSite站点=新SPSite(siteUrl+webUrl))
{
正在使用(SPWeb web=site.OpenWeb())//登录时返回NULL???
{
尝试
{
SPList list=null;
list=web.Lists[listName];
SPQuery query=新建SPQuery();
字符串qry=“”;
query.query=qry;
query.RowLimit=Convert.ToUInt32(numToReturn);
coll=list.GetItems(查询);
如果(coll!=null)
{
dt=coll.GetDataTable();
}
}
捕获(例外情况除外)
{
WriteLog(例如Message、System.Diagnostics.EventLogEntryType.Error);
}
}
}
返回dt;
}

我也从未遇到过这个问题,但在阅读了几篇关于它的文章后,似乎这是“默认行为”

OpenWeb()方法返回它能找到的“最低”web,例如:

  • (不存在)
  • (确实存在)
您的代码如下所示:

var web = site.OpenWeb("subsite/subsite1");
web对象将表示“子网站”,而不是“子网站1”,因为“子网站1”不存在

在您的情况下,这肯定是一个许可问题。是否为整个网站集启用了匿名访问,或者更具体地说,是否为您试图使用代码调用的网站启用了匿名访问?如果是这样,用户可以(匿名)打开web吗

修复它的最简单方法是使用SPSecurity.runWithLevelatedPrivileges包装该方法,但是它不是很优雅


是的,整个站点已启用anon访问。RunWithElevatedPrivs确实解决了这个问题。。我很想知道发生了什么。
var web = site.OpenWeb("subsite/subsite1");