通过ASP.NET访问Sharepoint Online文档列表

时间:2016-10-19 07:00:10

标签: asp.net sharepoint office365 sharepoint-online

我一直在搜索这个主题很长一段时间而没有找到银弹。我们在ASP.NET中有一个Intranet解决方案,我们只想在Office 365中显示来自Sharepoint Online的一些文件。

在Google上搜索它时会有很多点击,但似乎没有什么是"简单的"要走的路。我不是Sharepoint开发人员,但在管理公司的Office 365和Sharepoint Online安装时,我对这些概念有很好的理解。

我找到了当前的答案,告诉我REST服务是要走的路,但在这里我需要一个OATH令牌来访问它们,这就是我的Sharepoint知识有限的地方。从我所看到的,令牌只能通过已安装的Sharepoint应用程序授予,但我知道它可以在没有它的情况下完成。 我购买了一个同步工具,将我们的文件共享与Sharepoint文档列表同步,为此,我不需要任何令牌,我只需输入我的凭据,我就不必在Sharepoint中安装任何内容。 / p>

那么我想从这个问题中得到什么呢?

  • 知道Sharepoint的人很好地引导我朝着正确的方向前进,并且可能有导游并且知道该方法有效。也许REST是正确的方法,但我的同步软件可以在没有它的情况下做到这一点似乎很奇怪。

  • 如果我确实需要在Sharepoint中安装令牌服务器,请在安全方面知道什么以及如何以最佳方式处理它。

非常感谢任何帮助,并提前感谢! :)

2 个答案:

答案 0 :(得分:1)

Microsoft有两组API可以访问SharePoint Online:

  1. SharePoint Client Object Model,有了这个,您可以使用用户名和密码进行身份验证;点击链接,您可以找到如何访问文档列表的示例

    1. SharePoint REST api,您需要使用OAuth令牌进行身份验证。
  2. 对于你的情况,你应该使用第一个。

答案 1 :(得分:0)

SharePoint Online还支持基于声明的身份验证模式。这里的一般想法是从用户凭证获取身份验证cookie(除了发出访问令牌的 OAuth 身份验证流程)。获取身份验证cookie后,您可以执行身份验证的 SOAP(例如通过CSOM API)或针对SharePoint Online资源的REST请求,如下所示。

  

由于您正在开发ASP.NET Web应用程序,   可以使用来自SharePointOnlineCredentials classSharePoint Online Client Components SDK,它基本上可以实现   基于声明的认证方案。它可以通过nuget

安装

示例1:通过CSOM API的请求列表项

using (var ctx = GetContext(webUri.ToString(), userName, password))
{

     var list = ctx.Web.Lists.GetByTitle("Documents");
     var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
     ctx.Load(items);
     ctx.ExecuteQuery();

     foreach (var item in items)
     {
        Console.WriteLine(item.FieldValues["FileRef"]);
     }

}

,其中

private static ClientContext GetContext(string url,string username, string password)
{
     var ctx = new ClientContext(url);
     var securePassword = new SecureString();
     foreach (char c in password) securePassword.AppendChar(c);
     ctx.Credentials = new SharePointOnlineCredentials(username, securePassword);
     return ctx;
 }

示例2:通过REST API的请求列表项

using (var client = new SPHttpClient(webUri, userName, password))
{
    var listTitle = "Tasks";
    var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items",webUri,listTitle);
    var data = client.ExecuteJson(endpointUrl);
    foreach (var item in data["value"])
    {
        Console.WriteLine(item["Title"]);
    }
}

,其中

SPHttpClient.cs - 实现SharePoint Online的HTTP客户端(SPHttpClient类)

SPHttpClientHandler.cs - 实现SharePoint Online的HTTP处理程序