SharePoint REST API contextinfo的使用

  前言

  最近在请求SharePoint API的时候碰到403错误,很明显没有权限,那么,为什么呢?SharePoint页面中应该有上下文才是。好吧,如果你也遇到这样的问题,就先看看请求一下contextinfo这个方法吧。

  正文

  1.Ajax 请求SharePoint Online API,如下:

jQuery.ajax({
        url: "http://<site url>/_api/web/lists",
        type: "POST",
        data:  JSON.stringify({ '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true,
 'BaseTemplate': 100, 'ContentTypesEnabled': true, 'Description': 'My list description', 'Title': 'Test' }
),
        headers: {
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "content-length": <length of post body>,
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: doSuccess,
        error: doError
});

  2.但是,我们有时候没办法在页面中获取到"X-RequestDigest",那怎么办呢?这时候就需要contextinfo这个方法了:

  参考:Navigate the SharePoint data structure represented in the REST service | Microsoft Docs

POST https://{site_url}/_api/contextinfo
Authorization: "Bearer " + accessToken
Accept: "application/json;odata=verbose"

  3.当然,我们有时候还会在C#中请求,如下图:

HttpWebRequest endpointRequest =(HttpWebRequest)HttpWebRequest.Create("http://<site url>/_api/contextinfo");
endpointRequest.Method = "POST";
endpointRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();

  4.这样的方式是调用API常用的方式:

  $.ajax({
        url: siteurl + '/_api/contextinfo',
        method: 'POST',
        headers: { 'Accept': 'application/json; odata=verbose' }
    }).done(function (data) {
        var requestDigest = data.d.GetContextWebInformation.FormDigestValue
        ......//your request
    })

  总结

  除了调用api的时候需要contextinfo这个方法,很多时候在post的时候,也需要先这样获取RequestDigest,通常get方法可以不需要。

posted @ 2021-01-21 21:04  霖雨  阅读(413)  评论(0编辑  收藏  举报