Как создать пару значений ключа NextCloud при отправке REST-запросов? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь написать инструмент для Nextcloud.

Он считывает некоторую информацию из другой базы данных, а затем создает нового пользователя в Nextcloud, создает общую папку и копирует некоторые файлы в новую папку.Для этого я использую API Nextcloud.

Инструмент написан на C # и использует HttpWebRequest для отправки данных на сервер.Большинство вещей работает нормально, но при создании нового пользователя я не могу установить адрес электронной почты пользователя.Поэтому я попробовал другой метод из API, чтобы обновить существующего пользователя.

Чтобы обновить пользователя, я должен отправить данные в паре ключ-значение на сервер, используя метод PUT. См. Здесь информацию об API

string mail = "key='email' value='e@mail.us'";
        byte[] data = Encoding.ASCII.GetBytes(mail);

        string requestURL = $"https://nc.example.com/ocs/v1.php/cloud/users/USERNAME";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL);
        request.ContentType = "text/plain";
        request.Method = "PUT";
        request.ContentLength = data.Length;
        request.KeepAlive = true;
        request.Headers.Add("OCS-APIRequest", "true");
        request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes($"USERNAME:PASSWORD")));

        Stream dataStream = request.GetRequestStream();
        dataStream.Write(data, 0, data.Length);
        dataStream.Close();
        HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
        Console.WriteLine("" + webResponse.StatusCode);
        StreamReader sr = new StreamReader(webResponse.GetResponseStream());
        String result = sr.ReadToEnd();
        Console.Write(result);

В документации Nextcloud есть пример, чтобы сделать это

PUT http://admin:secret@example.com/ocs/v1.php/cloud/users/Frank -d key="email" -d value="franksnewemail@example.org"

Но я не знаю, как создатьпара ключ-значение для отправки на сервер.

У кого-нибудь есть идеи?

Заранее спасибо!

r3d007

Редактировать: возможно, это прощекогда я дам вам соответствующую команду cURL:

curl -u USER:PW -d key="email" -d value="user@mail.us" -X PUT 'https://nc.example.com/ocs/v1.php/cloud/users/USERNAME' -H "OCS-APIRequest: true"

Снова ... Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я понял.

Я установил RestSharp через NuGet.

Тогда это сработало для меня:

        RestClient rc = new RestClient($"{URL}{UserAPI}/{user}");
        rc.Authenticator = new HttpBasicAuthenticator(Username, Password);
        RestRequest rr = new RestRequest(Method.PUT);
        rr.AddHeader("OCS-APIRequest", "true");
        rr.AddParameter("key", "email");
        rr.AddParameter("value", email);
        var response = rc.Execute(rr);

Спасибо за помощь!

0 голосов
/ 21 сентября 2018

Вам необходимо создать объект со свойствами значения ключа

public class foo {

    public string key { get; set; }
    public string mail { get; set; }

}

и сериализовать его как ваши данные

...