2015-10-21 8 views
1

Я пытаюсь обеспечить некоторых пользователей автоматически через REST API. Моего REST вызов:Sharepoint 2013: EnsureUser через REST API

$.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, который соответствует типу содержимого ответа. Ни один из поддерживаемых типов (приложений) приложения/json; odata = verbose тип контента 'application/x-www-form-urlencoded; charset = UTF-8' "

Звонок построен как in the msdn reference.

ответ

4

Эта ошибка возникает, так как ContentType нужно указать явно, так как это запрос JSON:

contentType (по умолчанию: 'применение/х-WWW-форм-urlencoded; кодировка = UTF-8')

При отправке данных на сервер используйте этот тип контента. Значение по умолчанию "применение/х-WWW-форм-urlencoded; кодировка = 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|[email protected]' 
ensureUser(_spPageContextInfo.webAbsoluteUrl,loginName) 
.done(function(data) 
{ 
    console.log('User has been added'); 
}) 
.fail(function(error){ 
    console.log('An error occured while adding user'); 
}); 
+0

Часть с отсутствующим CONTENTTYPE прав - получил он работает с этим , (Так как когда ссылки на msdn ошибочны?: O) Я не рекомендую использовать этот пример кода, хотя - отсутствие обработчика ошибок может затруднить разработку. – sandrooco

+0

Функция 'fail' используется в моем примере для обработки ошибок, вы всегда можете получить данные об ошибках с объекта ответа' error' –

+0

Упс, не знал этого. Извините. – sandrooco

0

АЛЬТЕРНАТИВНЫЙ РЕШЕНИЕ:

Можно также выполнить 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.

Примечание:

  • При использовании методаensureUser против пользователя AD, просто использовать его имя. Итак, user_name будет примерно таким: «имя пользователя». Нет нужно добавить «домен» перед любым другим префиксом/суффиксом. Только имя пользователя

  • ТипСодержимого & принимать заголовки должны быть приложения/JSON; OData = многословным, кодировка = UTF-8

Смежные вопросы