4

SharePoint REST API contextinfo的使用

 3 years ago
source link: https://www.cnblogs.com/jianyus/p/14267484.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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方法可以不需要。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK