我正在尝试为Nextcloud编写工具。
它从另一个数据库读取一些信息,然后在Nextcloud中创建一个新用户,创建一个共享文件夹并将一些文件复制到新文件夹中。 为此,我使用的是Nextcloud的API。
该工具使用C#编写,并使用HttpWebRequest将数据发送到服务器。 大多数情况都可以正常工作,但是在创建新用户时,我无法设置该用户的电子邮件地址。因此,我尝试了API中的另一种方法来更新现有用户。
要更新用户,我必须使用PUT方法将键值对中的数据发送到服务器。 See here for API informations
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"
再次...提前致谢!
答案 0 :(得分:1)
我知道了。
我通过NuGet安装了RestSharp。
然后这对我有用:
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);
感谢您的帮助!
答案 1 :(得分:0)
您需要创建一个具有键值属性的对象
public class foo {
public string key { get; set; }
public string mail { get; set; }
}
并将其序列化为数据