访问被拒绝从MVC应用程序中访问SharePoint API

时间:2011-10-07 15:41:14

标签: asp.net asp.net-mvc sharepoint sharepoint-2010 sharepoint-api

尝试从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)

行失败

1 个答案:

答案 0 :(得分:2)

试试这个: 新的SPSite(siteUrl,SystemAccount.UserToken)