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

Access Sharepoint Online document list through ASP.NET

关于这个主题我已经搜索了很长时间,但没有找到灵丹妙药。我们在 ASP.NET 中有一个 Intranet 解决方案,我们只想在 Office 365 中显示来自 Sharepoint Online 的一些文件。

当您在 Google 上搜索它时,有很多匹配项,但似乎没有什么是 "simple" 的方法。我不是 Sharepoint 开发人员,但在管理我们公司的 Office 365 和 Sharepoint Online 安装时对这些概念有很好的理解。

我找到的当前答案告诉我 REST 服务是可行的方法,但在这里我需要一个 OATH 令牌才能访问它们,而这正是我的 Sharepoint 知识有限的地方。据我所知,令牌只能通过已安装的 Sharepoint 应用程序授予,但我知道没有它也可以完成。 我已经购买了一个同步工具,可以将我们的文件共享与 Sharepoint 文档列表同步,为此我不需要任何令牌,我只需输入我的凭据,而不必在 Sharepoint 中安装任何东西。

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

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

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

  1. SharePoint Client Object Model (CSOM):

    有了这个,你可以只使用用户名和密码来进行身份验证。按照 link 您可以找到有关如何访问文档列表的示例。

  2. SharePoint REST API:

    为此,您需要使用 OAuth 令牌进行身份验证。

对于你的情况,你应该使用第一个。

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

Since you are developing ASP.NET web application, SharePointOnlineCredentials class from SharePoint Online Client Components SDK could be utilized which basically implements claims-based authentication scheme. It could be installed via 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 class)

SPHttpClientHandler.cs - 为 SharePoint Online 实施 HTTP 处理程序