我有一个SP应用程序,我希望将其发布到商店。
我想在其中实现的最后一件事是许可证检查,我在服务器端(C#)上执行。
我发现要做到这一点,我需要首先从 SharePoint 检索当前许可证,我正在尝试使用以下代码执行此操作:
ClientResult<AppLicenseCollection> licenseCollection = Utility.GetAppLicenseInformation(clientContext, productId);
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();
但是,执行此代码会给我一个错误:远程服务器返回错误:(403) 禁止。
我尝试使用授予应用程序的各种权限(直到完全控制网站/站点/租户)运行它,但仍然出现相同的错误。
有谁知道缺少什么?,我正在从应用程序目录中获取产品ID,上下文似乎没问题,因为它返回其他类型的请求的结果。
你需要加载clientContext.Web吗?我正在检查我之前使用过的代码之一,它只运行客户端上下文.执行查询();
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);
}
好的,我已经让它返回许可证集合。在我最近的一些调整之后,上下文似乎初始化不正确,并且读取Web权限似乎足以加载许可证。
但是我现在看到的是我得到的许可证集合是空的。我的应用尚未在商店中,我仅将其部署到我的应用目录中,是否需要在应用商店中才能返回实际许可证?如果是这样,最好的方法是什么,我真的不想发布一个未完成的应用程序。
更新:我能够使用SPAppLicenseHelper.GenerateTestToken从这个项目上传测试许可证:https://code.msdn.microsoft.com/officeapps/SharePoint-2013-Import-f5f680a6/