Sharepoint 2013:通过 REST API 确保用户

Posted

技术标签:

【中文标题】Sharepoint 2013:通过 REST API 确保用户【英文标题】:Sharepoint 2013: EnsureUser via REST API 【发布时间】:2016-01-20 11:10:45 【问题描述】:

我正在尝试通过 REST API 自动确保某些用户。 我的 REST 调用:

$.ajax(
url: "blablabla/_api/web/ensureuser",
type: "POST",
data: " 'logonName': 'i%3A0%23.w%7Cdomain%09logonName' ",
headers: 
    "X-RequestDigest": $("#__REQUESTDIGEST").val(),
    "accept": "application/json;odata=verbose"
,
success: function () 
    console.log("done!");
,
error: function (err) 
    console.log(JSON.stringify(err));

);

现在发送此呼叫时,我收到以下错误;

“错误请求:Microsoft.Data.OData.ODataContentTypeException 找不到与响应的内容类型匹配的受支持的 MIME 类型。所有受支持的类型‘application/json;odata=verbose’都不匹配内容类型 'application/x-www-form-urlencoded; charset=UTF-8'"

调用的构建方式类似于指定的in the msdn reference。

【问题讨论】:

【参考方案1】:

出现此错误是因为ContentType 需要明确指定,因为它是 JSON 请求:

contentType (默认: 'application/x-www-form-urlencoded; charset=UTF-8')

向服务器发送数据时,使用此内容类型。默认为 "application/x-www-form-urlencoded; charset=UTF-8"

示例

function ensureUser(webUrl,loginName)

   var payload =  'logonName': loginName ; 
   return $.ajax(
      url: webUrl + "/_api/web/ensureuser",
      type: "POST",
      contentType: "application/json;odata=verbose",
      data: JSON.stringify(payload),
      headers: 
         "X-RequestDigest": $("#__REQUESTDIGEST").val(),
         "accept": "application/json;odata=verbose"
      
   );  



var loginName = 'i:0#.f|membership|jdoe@contoso.onmicrosoft.com'
ensureUser(_spPageContextInfo.webAbsoluteUrl,loginName)
.done(function(data)

    console.log('User has been added');
)
.fail(function(error)
    console.log('An error occured while adding user');
);

【讨论】:

缺少 contentType 的部分是正确的 - 让它与它一起工作。 (从什么时候开始的 msdn 引用错误?:O)不过我不建议使用这个代码示例 - 缺少错误处理程序会使开发变得非常糟糕。 fail 函数在我的示例中用于处理错误,您始终可以从error 响应对象中获取错误详细信息 哎呀,不知道。对不起。 我在确定登录名的正确语法时遇到了一点问题。如果我在 Sharepoint 中的登录名通常是 i:0#.w|dom\userX" 我将如何为 ensureUser-Method 设置登录名?@website 是否与 SPS-UserPrincipalName 中指定的地址相同? 对于 AD 用户:只使用 AD 用户名,不要使用域,也不要使用其他任何东西。确保在标题中添加“charset=utf-8”【参考方案2】:

替代解决方案:

您还可以通过以下方式执行 REST 查询:

        $.ajax(
        url: "http://[website]/_api/web/ensureuser('"+user_name+"')",
        type: "POST",
        headers:              
            'accept': 'application/json;odata=verbose;charset=utf-8',
            'Content-Type': 'application/json;odata=verbose;charset=utf-8',
            'X-RequestDigest': $("#__REQUESTDIGEST").val()                    
        ,
        success: function(response_data) [your custom success action]
        ,
        error: function(response_data)[your custom fail action]
      );

var user_name 将包含目标 AD 用户名。

注意:

当对 AD 用户使用 ensureUser 方法时,只需使用其 用户名。所以,user_name 应该是这样的:“用户名”。不 需要在任何其他类型的前缀/后缀之前添加“域\”。 只是用户名

ContentType 和接受标头必须是 application/json;odata=verbose;charset=utf-8

【讨论】:

在我的错误消失之前,我必须像这个解决方案建议的那样将 Content-Type 添加到标题中。

以上是关于Sharepoint 2013:通过 REST API 确保用户的主要内容,如果未能解决你的问题,请参考以下文章

Sharepoint 2013:通过 REST API 确保用户

Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403

SharePoint 2013 - REST API about Content

如何通过 REST API 在另一台服务器上为 Sharepoint 2013 和 Sharepoint Online 运行的脚本中更新 SharePoint 列表?

text 更新项REST API调用SharePoint 2013

javascript 删除项REST API调用SharePoint 2013