如何使我的控制台应用程序具有对Sharepoint Online站点的更新访问权限?

如何使我的控制台应用程序具有对Sharepoint Online站点的更新访问权限?,sharepoint,ms-office,officedev,Sharepoint,Ms Office,Officedev,在MVA课程“SharePoint平台的构建块和服务”的模块2中,题为“深入研究SharePoint列表以进行数据存储”(大约45分钟),Ted Pattison演示了如何使用控制台应用程序在SharePoint在线网站上创建列表。课程在 我试图在我的环境中做同样的事情,但我遇到了麻烦 在演示中,他转到_layouts/15/AppRegNew.aspx在应用程序注册表中注册一个新应用程序。在演示中,页面顶部有一个“应用程序类型”单选按钮列表,选项为“在web服务器上运行的应用程序”和“在客户端

在MVA课程“SharePoint平台的构建块和服务”的模块2中,题为“深入研究SharePoint列表以进行数据存储”(大约45分钟),Ted Pattison演示了如何使用控制台应用程序在SharePoint在线网站上创建列表。课程在

我试图在我的环境中做同样的事情,但我遇到了麻烦

在演示中,他转到_layouts/15/AppRegNew.aspx在应用程序注册表中注册一个新应用程序。在演示中,页面顶部有一个“应用程序类型”单选按钮列表,选项为“在web服务器上运行的应用程序”和“在客户端计算机上运行的应用程序”。当我在我的网站上访问这个页面时,没有这样的单选按钮列表。同样在演示中,Ted将重定向URL留空。在我的网站上,需要: 所以为了克服这个问题,我输入了我网站的URL()。已成功创建应用程序ID:

然后我去了_layouts/15/AppInv.aspx给应用程序提供安全性。我粘贴了CAML,以使应用程序能够读取web:

  <AppPermissionRequests>
    <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read" />
  </AppPermissionRequests>
上面的代码获取域和访问令牌并成功创建clientContext,但当我运行executeQuery时,总是会收到错误Microsoft.SharePoint.Client.ServerUnauthorizedAccessException。我已经尝试过让应用程序ID完全控制网站、网站集和租户,但我仍然遇到同样的错误


如何使我的控制台应用程序对我的站点具有更新访问权限?

在appinv.aspx中添加权限时,我需要设置AllowAppOnlyPolicy

<AppPermissionRequests AllowAppOnlyPolicy="true" >

我使用上的代码使其工作,但我仍然好奇如何使用应用程序id使其工作。
static void Main(string[] args)
        {
            string siteUrl = ConfigurationManager.AppSettings["targetSiteUrl"];
            bool deleteOnly = ConfigurationManager.AppSettings["deleteOnly"].Equals("true");


                Uri siteUri = new Uri(siteUrl);
            string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);
            var accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal,
                siteUri.Authority, realm).AccessToken;
            using (var clientContext = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken)) {

                var web = clientContext.Web;
                clientContext.Load(web);
                clientContext.ExecuteQuery();

                Console.WriteLine(web.Title);

            }



        }
<AppPermissionRequests AllowAppOnlyPolicy="true" >