当前位置: 首页 > 知识库问答 >
问题:

签入/签出Sharepoint REST API

严兴旺
2023-03-14

从documentLibrary中列出文件并从列表中签出文件

用javascript编写

我已经为此挣扎了几天,到目前为止还没有这样的运气。

即使它是OneDrive API,它也应该与SharePoint Doc.Libraries-REST APIs部分:“REST API在OneDrive、OneDrive for Business、SharePoint文档库和Office组之间共享,以允许...”

结果呢?签入/签出html" target="_blank">文件时,请在此处查看:Sharepoint`不支持的段类型`

好消息是,OAuth的工作方式很好--我从https://apps.dev.microsoft.com/获得了客户端ID,身份验证endpoint:

https://login.Microsoftonline.com/common/oauth2/v2.0/authorizehttps://login.Microsoftonline.com/common/oauth2/v2.0/token

签出选项2-Sharepoint外接程序

url: http://site url/_api/web/GetFileByServerRelativeUrl('/Folder Name/file name')/CheckOut(),
method: POST
headers:
    Authorization: "Bearer " + accessToken
    X-RequestDigest: form digest value

这一个工作得很好,但在这种情况下,OAuth是问题...

此链接很有希望:https://docs.microsoft.com/en-us/sharePoint/dev/sp-add-ins/authorization-code-oauth-flow-for-sharePoint-add-ins

但是,在这个过程中,涉及到Microsoft Azure Access Control Service(ACS),该服务(根据此链接https://docs.Microsoft.com/en-us/Azure/active-directory/development/active-directory-acs-migration)即将关闭。

解决方案似乎是切换到Azure应用程序(https://portal.Azure.com->Azure Active Directory->App注册)。无论如何,使用这些设置的访问令牌与Sharepoint API所需的访问令牌不兼容,例如:

https://mindjet2.sharepoint.com/_api/contextinfo抛出异常'Microsoft.IdentityModel.tokens.AudienceuriValidationFailedException'

我在图API上做错了什么?使用OAuth验证Sharepoint API的正确方法是什么?

共有1个答案

何超英
2023-03-14

在SharePoint外接程序中,我们可以使用跨域库来实现。

检查下面的代码:

'use strict';  
var hostweburl;   
var appweburl;   

// This code runs when the DOM is ready and creates a context object which is   
// needed to use the SharePoint object model  
$(document).ready(function () {  

    //Get the URI decoded URLs.   
    hostweburl =   
    decodeURIComponent(   
    getQueryStringParameter("SPHostUrl"));   
    appweburl =   
    decodeURIComponent(   
    getQueryStringParameter("SPAppWebUrl"));   
    // Resources are in URLs in the form:  
    // web_url/_layouts/15/resource  
    var scriptbase = hostweburl + "/_layouts/15/";    

    // Load the js file and continue to load the page with information about the list top level folders.  
    // SP.RequestExecutor.js to make cross-domain requests  

    // Load the js files and continue to the successHandler  
    $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest);  
});  

// Function to prepare and issue the request to get  
//  SharePoint data  
function execCrossDomainRequest() {  
    // executor: The RequestExecutor object  
    // Initialize the RequestExecutor with the app web URL.  
    var executor = new SP.RequestExecutor(appweburl);             

    var metatdata = "{ '__metadata': { 'type': 'SP.Data.TestListListItem' }, 'Title': 'changelistitemtitle'}";  

    // Issue the call against the app web.  
    // To get the title using REST we can hit the endpoint:  
    //      appweburl/_api/web/lists/getbytitle('listname')/items  
    // The response formats the data in the JSON format.  
    // The functions successHandler and errorHandler attend the  
    //      sucess and error events respectively.  
    executor.executeAsync({            
        url:appweburl + "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('/Shared Documents/a.txt')/CheckOut()?@target='" +    
        hostweburl + "'",    
        method: "POST",    
        body: metatdata ,    
        headers: { "Accept": "application/json; odata=verbose", "content-type": "application/json; odata=verbose", "content-length": metatdata.length, "X-HTTP-Method": "MERGE", "IF-MATCH": "*" },            
        success: function (data) {  
            alert("success: " + JSON.stringify(data));  
        },  
        error: function (err) {  
            alert("error: " + JSON.stringify(err));  
        }    
    });
}                    
// This function prepares, loads, and then executes a SharePoint query to get   
// the current users information        
//Utilities   

// Retrieve a query string value.   
// For production purposes you may want to use   
// a library to handle the query string.   
function getQueryStringParameter(paramToRetrieve) {   
    var params =document.URL.split("?")[1].split("&");     
    for (var i = 0; i < params.length; i = i + 1) {   
        var singleParam = params[i].split("=");   
        if (singleParam[0] == paramToRetrieve)   
        return singleParam[1];   
    }   
} 

参考:https://www.c-sharpconer.com/uploadfile/472cc1/check-out-files-in-sharepoint-library-2013-using-rest-api/

 类似资料:
  • 问题内容: 尝试使用 这将失败,并显示身份验证错误。除了使用以外还有其他方法吗 withCredentials 在Jenkinsfile中签出标签 问题答案: 花完之后,几个小时就到了 在声明式管道中使用GitSCM的正确方法是 不像我在网络上的大多数地方都找到的

  • 问题内容: 这是我在该论坛上的第一篇文章。 我坚持使用Microsoft SSIS软件包,但我真的不知道如何击败它。我已经提到过SSIS包文件,并且尝试使用SQL Server 2005上的Business Intelligence Development Studio打开它-结果导致错误,提示我需要它的另一个版本- 我认为它将BIDS与SQL Server 2008结合使用。 当我进一步阅读时,

  • 问题内容: 作为一个初学者,我想知道是否有一种方法可以在redis中编写以下查询 现在,我必须对此查询进行两次单独的扫描,如下所示 问题答案: 我看到您在这里有3个选择: 将两个命令都包装到 Lua 脚本中,并像调用单个命令一样对其进行调用。 而不是 扫描 做 索引 。创建一个 组 或 有序集合 在这里您可以存储所有元素,这些模式相匹配,只是执行AA SSCAN 或 zscan 没有。 像现在一样

  • 我已经做了一个SVN结帐(使用乌龟SVN)。然后将它导入到Eclipse工作区(放置在不同的目录中),作为。这似乎很有效。 但是Eclipse似乎没有看到这是一个SVN签出。例如,我看不到任何方法来查看文件或其历史记录的本地更改。 更新: 我在Eclipse中安装了以下软件: 协作 用于Mylyn项目的颠覆性SVN集成(可选)1.1.0.i20130527-1700 颠覆性SVN JDT忽略扩展(

  • 我正在尝试从外部远程服务对文档进行签名。签署过程分两个阶段进行。远程服务在第一阶段期待base64编码的散列,并在身份验证后发出令牌。在第二阶段,我们将使用接收到的令牌再次传递相同的散列并获得base64签名的散列。我在这里附上签名错误的文件。文件 如果有人可以分析它并指导我评估无效签名背后的原因。我正在使用执行与pdf相关的操作。 更新 根据反馈,我做了一些更正。文档现在正在更改。已更改的文档

  • 我正在构建一个应用程序,使用Laravel与Paypal PHP SDK,一切正常,但今天当我想做一些测试结账,我面临一些错误,贝宝安全登录停止工作,正如我检查,似乎贝宝PHP SDK链接现在已弃用,我们必须为API V2 Link使用新的SDK。 我下载了新的PHP SDK,但是从留档中,他们只提供了如何使用SDK创建订单的示例,没有提供创建付款的示例。 我的第一个问题,订单V2和付款V2有什么