C# 从共享文件夹中检索siteId和listId
我目前正在从共享文件夹中检索siteId和listId。 到目前为止,我在Sharepoint文件夹中成功地执行了此操作,在该文件夹中我可以访问Sharepoint根目录,但当我使用共享Sharepoint位置的URL时,我收到以下错误消息: “租约的主机名无效” 从上下文来看,我的用例如下:C# 从共享文件夹中检索siteId和listId,c#,sharepoint,.net-core,microsoft-graph-api,microsoft-graph-sdks,C#,Sharepoint,.net Core,Microsoft Graph Api,Microsoft Graph Sdks,我目前正在从共享文件夹中检索siteId和listId。 到目前为止,我在Sharepoint文件夹中成功地执行了此操作,在该文件夹中我可以访问Sharepoint根目录,但当我使用共享Sharepoint位置的URL时,我收到以下错误消息: “租约的主机名无效” 从上下文来看,我的用例如下: 我的一位同事与我共享一个来自Sharepoint(xxx.Sharepoint.com)的文件夹 我有权访问他的文件夹 如果我只是去根目录(xxx.sharepoint.com),我会被“拒绝访问”,这
- 我的一位同事与我共享一个来自Sharepoint(xxx.Sharepoint.com)的文件夹
- 我有权访问他的文件夹
- 如果我只是去根目录(xxx.sharepoint.com),我会被“拒绝访问”,这很好(我相信)
- 我想使用此文件夹的URL从共享文件夹中检索sideId、listId(以及最终的driveId)
public async Task<List> UrlToList(string accessToken, string url)
{
url = url.Replace("/Forms/AllItems.aspx", "");
Uri uri = new Uri(url);
var segments = string.Join("", uri.Segments[0..^1]).TrimEnd('/');
var request = graphClient.Sites[uri.Host].SiteWithPath(segments).Lists.Request(Options(accessToken));
var lists = await request.GetAsync();
var list = lists.First(l => string.Compare(url, l.WebUrl, true) == 0);
return list;
}
公共异步任务url列表(字符串访问令牌,字符串url)
{
url=url.Replace(“/Forms/AllItems.aspx”,”);
Uri=新的Uri(url);
var segments=string.Join(“,uri.segments[0..^1]).TrimEnd('/');
var request=graphClient.Sites[uri.Host].SiteWithPath(segments).list.request(Options(accessToken));
var lists=wait request.GetAsync();
var list=lists.First(l=>string.Compare(url,l.WebUrl,true)==0);
退货清单;
}
到目前为止,我只看到两种选择。。。它可能来自xxx.sharepoint.com的配置或权限问题
有没有任何可能的方法来检索这些信息?如果是,怎么做?还有什么地方有代码示例吗?在尝试不同的解决方案后,由于用户和sharepoint目标之间的租约不同,出现此错误的确切原因是什么 要解决此问题,您首先需要使用空承载器对url xxx.sharepoint.com/site/subsite/Forms/AllItems.aspx执行HTTP Get请求。从中可以找到sharepoint目标的租户 拥有tenantId后,需要使用该tenantId请求新的访问令牌,如以下示例所示
public async Task<string> GetAccessToken(string clientId, string clientSecret, string scope, string refreshToken, string grantType = "refresh_token", string tenantId = "common")
{
var request = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token");
request.Content = new FormUrlEncodedContent(new Dictionary<string, string>() {
{"client_id", clientId },
{"scope", scope },
{"refresh_token", refreshToken },
{"grant_type", grantType },
{"client_secret", clientSecret }
});
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return result;
}
public异步任务GetAccessToken(string clientId、string clientSecret、string scope、string refreshtToken、string grantType=“refresh\u token”、string tenantId=“common”)
{
var request=newhttprequestmessage(HttpMethod.Post,$)https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token”);
request.Content=newformurlencodedcontent(newdictionary(){
{“client_id”,clientId},
{“范围”,范围},
{“刷新令牌”,刷新令牌},
{“grant_type”,grantType},
{“客户机密”,客户机密}
});
HttpResponseMessage response=等待客户端.SendAsync(请求);
response.EnsureSuccessStatusCode();
var result=await response.Content.ReadAsStringAsync();
返回结果;
}
如果您请求sideId、listId、…,则使用此访问令牌,。。。对于给定的sharepoint目标,您将能够检索它们
希望它能帮助您回答这个问题。访问令牌的作用域是特定的应用程序、租户、用户和权限。如果其中任何一项不匹配,您将被拒绝访问。