注册容器类型时,SharePoint REST API 返回 invalidRequest apiNotFound

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

我正在尝试调用 SharePoint REST API 来注册新的 SharePoint 嵌入式容器类型。我正在关注此处的教程:https://learn.microsoft.com/en-us/training/modules/sharepoint-embedded-setup/5-exercise-setup-configure-sharepoint-embedded 我尝试在 C# 中实现容器类型注册,而不是使用 PostMan,以便我的应用程序可以自动执行此操作。

起初我尝试将教程中的预请求 JavaScript 映射到 C#,但后来我意识到我可以使用 MSAL 来获取必要的访问令牌。至少当我使用这样生成的令牌时,我没有收到任何身份验证错误:

X509Certificate2 appCertificate = GetAppCertificate();

IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create( this.Configuration.ClientAppId )
    .WithTenantId( this.Configuration.ConsumingTenantId )
    .WithCertificate( appCertificate )
    .Build();
AuthenticationResult authenticationResult = await app.AcquireTokenForClient( new List<string> { this.Configuration.RootSiteUrl + "/.default" } )
    .ExecuteAsync();
return authenticationResult.AccessToken;

但是当我尝试调用容器类型注册 URL 时:

string payload = $$"""
    {
      "value": [
        {
          "appId": "{{this.Configuration.ClientAppId}}",
          "delegated": ["full"],
          "appOnly": ["full"]
        }
      ]
    }
    """;

httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue( "Bearer", token );

string url = $"{this.Configuration.RootSiteUrl}/_api/v2.1/storageContainerTypes/{this.Configuration.ContainerTypeId}/applicationPermissions";
var response = await httpClient.PostAsync( url, new StringContent( payload, Encoding.UTF8, "application/json" ) );

我收到代码错误

apiNotFound
。起初我以为我可能没有在我的 SharePoint 实例中启用 SharePoint 嵌入功能。但我根本没有找到相关的设置,并且提到需要设置该设置的视频也说只有在该功能处于预览状态时才需要设置,所以我认为它现在默认启用。

我能找到的对“SharePoint apiNotFound”的唯一参考是:https://github.com/SharePoint/sp-dev-docs/issues/9081。但它讨论了 GraphAPI 中的打字问题,我正在讨论原始 SharePoint REST API。

c# sharepoint
1个回答
0
投票

好吧,就像往常一样,这是作者犯的一个小小的愚蠢错误。容器类型注册是 PUT 操作,而不是 POST:

var response = await httpClient.PutAsync( url, new StringContent( payload, Encoding.UTF8, "application/json" ) );

当所使用的 HTTP 方法没有路由时,“未找到 API”是一个完全明智的错误消息。好吧,至少现在有一个搜索结果指出了这一点。

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