如何获取内容类型

时间:2010-04-20 13:17:29

标签: c# sharepoint sharepoint-2007 web-services

我正在开发一个Windows应用程序,通过其内置的Web服务与SharePoint通信,我希望在SharePoint网站上提供所有内容类型,

我正在尝试使用

Web.Webs WebsService = new Web.Webs(); WebsService.Credentials =凭证; WebsService.Url =“网络服务的网址”; XmlNode listOfContentTypes = WebsService.GetContentTypes();

如果凭据具有管理员权限,我可以获得所有可用内容类型的列表,但如果凭据没有管理员权限,则抛出401异常(不是权限)。

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

3 个答案:

答案 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要求您具有ManageListsAddAndCustomizePages权限以检索所有内容类型。

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

答案 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服务器。

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