0

我有一个 SP 应用程序,我希望将其发布到商店。

我想在其中实现的最后一件事是许可证检查,这是我在服务器端 (C#) 进行的。

我发现要做到这一点,我需要首先从 SharePoint 检索当前许可证,我正在尝试使用以下代码:

            ClientResult<AppLicenseCollection> licenseCollection = Utility.GetAppLicenseInformation(clientContext, productId);
            clientContext.Load(clientContext.Web);
            clientContext.ExecuteQuery();

但是执行此代码给我一个错误:远程服务器返回错误:(403)禁止。

我尝试使用授予应用程序的各种权限(最多可以完全控制网站/站点/租户)运行它,但仍然出现相同的错误。

有谁知道缺少什么?,我正在从应用程序目录中获取产品 ID,并且上下文似乎没问题,因为它返回了其他类型请求的结果。

4

2 回答 2

0

好的,我已经把它归还了许可证集合。在我最近的一些调整之后,上下文似乎被错误地初始化了,并且 Read Web 权限似乎足以加载许可证。

但是我现在看到的是我得到的许可证集合是空的。我的应用程序还没有在商店中,我只将它部署到我的应用程序目录中,是否需要在商店中才能获得返回的实际许可证?如果是这样,最好的前进方式是什么,我真的不想发布未完成的应用程序。

更新:我能够从该项目中使用 SPAppLicenseHelper.GenerateTestToken 上传测试许可证:https ://code.msdn.microsoft.com/officeapps/SharePoint-2013-Import-f5f680a6/

于 2017-01-06T17:15:00.180 回答
0

你需要加载clientContext.Web吗?我正在检查我之前使用的代码之一,它只是运行 clientContext.ExecuteQuery();

try
{
var contextToken = TokenHelper.GetContextTokenFromRequest(Page.Request);
var hostWeb = Page.Request["SPHostUrl"];
var appWeb = Page.Request["SPAppWebUrl"];
using (var clientContext =
TokenHelper.GetClientContextWithContextToken(
hostWeb, contextToken, Request.Url.Authority))
{
 ClientResult<AppLicenseCollection> licenses =
 Microsoft.SharePoint.Client.Utilities.Utility.
 GetAppLicenseInformation(clientContext, _productID);

 clientContext.ExecuteQuery();

 if (licenses.Value.Count == 0)
     throw new InvalidOperationException("No license");
 string licenseString = licenses.Value[0].RawXMLLicenseToken;
 }
}
catch (Exception ex)
{
 Response.Write("Licensing failed: " + ex.Message);
}
于 2017-01-06T16:38:55.297 回答