У меня есть веб-сервис, в котором механизм аутентификации настроен на аутентификацию Windows (NTLM). С помощью этой веб-службы я создаю / обновляю элементы в списке SharePoint. Я хочу создать / обновить элемент с текущим вошедшим в систему пользователем. Ниже мой блок кода.
public string InsertItem(string title)
{
try
{
Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultNetworkCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "NTLM");
string siteUrl = "http://spdev:91";
ClientContext clientContext = new ClientContext(siteUrl);
clientContext.Credentials = credential;
Web web = clientContext.Web;
clientContext.Load(web);
List testlist = clientContext.Web.Lists.GetByTitle("Test");
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem newItem = testlist.AddItem(itemCreateInfo);
newItem["Title"] = title;
newItem.Update();
clientContext.ExecuteQuery();
return "";
}
catch (Exception ex)
{
return ex.Message;
}
}
Но каждый раз элемент создается пользователем пула приложений, а не вошедшим в систему пользователем. Есть ли способ создавать элементы в списке с текущим зарегистрированным пользователем с кодом? Оцените любое предложение по этому поводу.





DefaultNetworkCredentials означает, что веб-служба будет работать в текущем контексте безопасности, которым является пул приложений. Также невозможно передать учетные данные пользователя.
Если ваша учетная запись пула приложений имеет достаточные привилегии (полный контроль над списком / сайтом), вы можете установить поля Создано, Создано, Изменено и Изменено кем с помощью CSOM. Вы можете передать данные текущего пользователя (имя для входа) при вызове веб-службы.
ClientContext ctx = new ClientContext("http://site");
List list = ctx.Web.Lists.GetByTitle("List");
ListItemCollection items = list.GetItems(CamlQuery.CreateAllItemsQuery());
ctx.Load(items);
ctx.ExecuteQuery();
User currentUser= ctx.Web.EnsureUser("domain\\user");
ctx.Load(currentUser);
ctx.ExecuteQuery();
foreach (var item in items)
{
item["Created"] = "date";
item["Modified"] = "date";
item["Editor"] = currentUser;
item["Author"] = currentUser;
item.Update();
}
ctx.ExecuteQuery();