使用访问令牌访问 SharePoint 网站

问题描述 投票:0回答:1

我正在尝试使用访问令牌访问 Share Point 站点,而不是在 CSOM 库中传递凭据。

访问端点时出现以下错误。 相同的代码适用于 Windows 窗体环境

ActiveX 控件 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 无法实例化,因为当前线程不在单线程单元中。

我已尝试使用 Windows 窗体执行以下代码,并且它有效。 使用 Windows 窗体应用程序获取共享点站点的标题,但在 MVC Web API 中它会抛出错误

代码


// MVC Controller API End Point 

        [STAThread]
        [Route("api/ATTitle")]
        [HttpGet]
        public async Task<string> ConsumeSPOWithOAuthAccessToken()
        {
            string title = "";
            string targetSiteUrl = "https://xxxxxx.sharepoint.com/sites/documents";

            //string returnUrl = "https://login.microsoftonline.com/common/oauth2/nativeclient";

            var spoTenant = targetSiteUrl.Substring(0, targetSiteUrl.IndexOf('/', 8));

            PublicClientApp = PublicClientApplicationBuilder.Create(clientId)
                                                             .WithDefaultRedirectUri()
                                                             .Build();

            var _scopes = new String[] { $"{spoTenant}/AllSites.Read" };


            var authResult = await PublicClientApp.AcquireTokenInteractive(_scopes).ExecuteAsync();

            Console.WriteLine(authResult.AccessToken);

            var handler = new JwtSecurityTokenHandler();

            var token = handler.ReadJwtToken(authResult.AccessToken);
    
            var authManager = new OfficeDevPnP.Core.AuthenticationManager();

            using (var context = authManager.GetAzureADAccessTokenAuthenticatedContext(targetSiteUrl, authResult.AccessToken))
            {
                var web = context.Web;
                context.Load(web, w => w.Title);
                context.ExecuteQueryRetry();
                title = web.Title;
            }

            return title;

        }


任何帮助将不胜感激

谢谢

access-token sharepoint-online
1个回答
0
投票

您遇到的错误表明代码正在尝试在不支持的环境中实例化 ActiveX 控件。这在 Web 应用程序(如 MVC Web API)中很常见,因为它们默认在多线程环境中运行,而 Windows 窗体在单线程单元 (STA) 环境中运行。要解决此问题,您可以在单线程单元线程上运行有问题的代码。

© www.soinside.com 2019 - 2024. All rights reserved.