尝试从ASP.NET MVC应用程序中通过SharePoint API访问SharePoint 2010网站时出现以下错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
MVC应用程序以64位模式托管在IIS7上,其中应用程序池用户是SharePoint安装上的站点管理员。 重要的是,调用同一Web应用程序中托管的SharePoint API的WCF服务可以正常运行,因此我觉得很奇怪,我无法从Controller Action中获得相同的结果。
我试过了:
System.web/identity impersonate="true" etc etc
System.web/authentication mode="Windows"
无论上面尝试了什么,System.Security.Principal.WindowsIdentity.GetCurrent().Name
都会返回预期的应用程序池用户,但 Request.IsAuthenticated
会返回false。这是通过调试程序检查以及编程方式验证的。在事件日志中:
Event code: 4011
Event message: An unhandled access exception has occurred.
...
Process information:
Process ID: 1234
Process name: w3wp.exe
Account name: VALIDDOMAIN\VALIDUSER
Request information:
Request URL: http://localhost:2000/Service/
Request path: /Service/
User host address: ::1
User:
Is authenticated: False
Authentication Type:
Thread account name: VALIDDOMAIN\VALIDUSER
如何从标准MVC3 Web应用程序控制器操作调用SharePoint 2010 API?
更新01:
这是我正在使用的代码:
using (SPSite site = new SPSite(siteUrl))
{
workflow.SPSiteCollectionID = site.ID;
using (SPWeb web = site.OpenWeb())
{
foreach (SPGroup group in web.SiteGroups)
{
//some code
}
}
}
这在foreach (SPGroup group in web.SiteGroups)
答案 0 :(得分:2)
试试这个: 新的SPSite(siteUrl,SystemAccount.UserToken)