我正在开发一个Windows应用程序,通过其内置的Web服务与SharePoint通信,我希望在SharePoint网站上提供所有内容类型,
我正在尝试使用
Web.Webs WebsService = new Web.Webs(); WebsService.Credentials =凭证; WebsService.Url =“网络服务的网址”; XmlNode listOfContentTypes = WebsService.GetContentTypes();
如果凭据具有管理员权限,我可以获得所有可用内容类型的列表,但如果凭据没有管理员权限,则抛出401异常(不是权限)。
我的问题是:
如果我没有管理员权限,如何在SharePoint网站上获取所有内容类型?
答案 0 :(得分:2)
我在Reflector中做了一些探讨,看看实际需要什么权限。请查看以下方法,该方法位于GetContentTypes()
服务方法的调用链中:
public string GetContentTypeTemplates()
{
SPWeb web = SPContext.GetContext(HttpContext.Current).Web;
web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.ManageLists);
web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.AddAndCustomizePages);
return this.GetGeneralContentTypes(web.AvailableContentTypes);
}
通过此,我们可以收集SharePoint要求您具有ManageLists
和AddAndCustomizePages
权限以检索所有内容类型。
因此,一个解决方案可能是确保客户帐户具有这些权限,可能是通过创建自定义权限级别,或者如果在发布网站中工作,则将该帐户添加到设计者组。
答案 1 :(得分:1)
如果您希望使用OOB Web服务,则需要在调用应用程序中提供凭据(具有足够权限)。
Web.Webs WebService = new Web.Webs();
WebService.Credentials = new NetworkCredential("username", "password");
XmlNode list = WebService.GetContentTypes();
您如何获得这些凭据取决于您......
答案 2 :(得分:0)
您可以编写一个包装Web服务,该服务使用所需的凭据调用Web Web服务(甚至使用SharePoint对象模型)。可以将此包装器服务部署到SharePoint服务器。
然后,您的自定义应用程序可以调用包装器服务,而无需提供正确的凭据。