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