代码之家  ›  专栏  ›  技术社区  ›  Gaby

如何获取内容类型

  •  3
  • Gaby  · 技术社区  · 16 年前

    我正在开发一个Windows应用程序,它通过内置的Web服务与SharePoint对话,我希望在SharePoint网站上获得所有可用的内容类型,

    我想用

    web.webs webservice=new web.webs(); webservice.credentials=凭证; web service.url=“Web服务的url”; xmlnode listofcontenttypes=webservice.getContentTypes();

    如果凭据具有管理员权限,我可以获取所有可用内容类型的列表,但是如果凭据不具有管理员权限,则会引发401异常(不是无权限)。

    我的问题是:
    如果我没有管理员权限,如何获取SharePoint网站上可用的所有内容类型?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Paul Lucas    16 年前

    如果您希望使用OOB Web服务,则需要在您的呼叫应用程序中提供凭据(具有足够的权限)。

            Web.Webs WebService = new Web.Webs();
            WebService.Credentials = new NetworkCredential("username", "password");
            XmlNode list = WebService.GetContentTypes();
    

    如何获得这些证书取决于你…

        2
  •  2
  •   kbrimington    16 年前

    我在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 检索所有内容类型的权限。

    因此,一种解决方案是确保客户机帐户具有这些权限,可能是通过创建自定义权限级别,或者如果在发布站点内工作,则将该帐户添加到Designers组。

        3
  •  0
  •   Paul Lucas    16 年前

    您可以编写一个包装Web服务,用所需的凭据调用WebWebService(甚至使用SharePoint对象模型)。此包装服务可以部署到SharePoint服务器。

    然后,您的自定义应用程序可以调用包装服务,而无需提供正确的凭据。

    推荐文章