【发布时间】:2022-11-13 02:41:05
【问题描述】:
我想使用 c# 和 directus api 在 cms 中插入和更新记录。我不知道该怎么做。 我还需要使用 JWT 令牌来插入和更新 cms 中的记录。你能帮助我吗?
我已经描述了我需要知道如何使用 c# 和 directus api 在 cms 后面的数据库中更新和插入记录。我希望代码片段可以看到如何使用 c#、directus api 和 jwt 令牌进行发布和更新调用。
【问题讨论】:
我想使用 c# 和 directus api 在 cms 中插入和更新记录。我不知道该怎么做。 我还需要使用 JWT 令牌来插入和更新 cms 中的记录。你能帮助我吗?
我已经描述了我需要知道如何使用 c# 和 directus api 在 cms 后面的数据库中更新和插入记录。我希望代码片段可以看到如何使用 c#、directus api 和 jwt 令牌进行发布和更新调用。
【问题讨论】:
您好,您可以使用 HttpClient 的 Get 、 Post 和 Patch 方法来执行此操作, 下面你可以找到一个带有读取/插入/更新的草稿类(带有静态成员)(删除尚未实现,登录也没有......)
对于身份验证,您应该从 directus 管理面板为用户生成一个令牌,然后将其作为参数传递给 Directus 类: (或者您可以使用返回身份验证令牌的用户名和密码实现登录)。
你可以像这样使用它:
// init once like this
Directus.serverUrl = "http://192.168.1.100:8055";
Directus.accessToken = "<past_your_access_token_here>";
// then you can retrieve data like :
string filter = "filter[status][_eq]=published&filter[field1][_eq]=value1";
var response = await Directus.GetItems(ResReader.table, filter);
var obj = JObject.Parse(response)
/////
var datarow = JObject.FromObject(new {
field1 = value1,
field2 = value2
});
// insert
await Directus.InsertItem("table_name",datarow);
// update
Directus.UpdateItem("table_name", "<id>", datarow));
class Directus
{
public static HttpClient httpClient = new HttpClient();
public static String? serverUrl;
public static String? accessToken;
public static void Auth()
{
if(httpClient.DefaultRequestHeaders.Authorization == null)
{
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + Directus.accessToken);
}
}
public static Task<string> GetItems(string? table, string? filters)
{
return GetAsync("/items/" + table , filters);
}
public static Task<HttpResponseMessage> InsertItem(string? table, JObject? item)
{
return PostAsync("/items/" + table, item);
}
public static Task<HttpResponseMessage> UpdateItem(string? table, string id, JObject? item)
{
return PatchAsync("/items/" + table + "/" + id, item);
}
private static Task<string> GetAsync(string? action, string? filters)
{
Auth();
return httpClient.GetStringAsync(Directus.serverUrl + action + "?" + filters);
}
private static Task<HttpResponseMessage> PostAsync(string? action, JObject? item)
{
Auth();
var content = new StringContent(item.ToString(), Encoding.UTF8, "application/json");
Console.WriteLine("PostAsync Action : {0}", action);
//Console.WriteLine(item.ToString());
return httpClient.PostAsync(Directus.serverUrl + action , content);
}
private static Task<HttpResponseMessage> PatchAsync(string? action, JObject? item)
{
Auth();
var content = new StringContent(item.ToString(), Encoding.UTF8, "application/json");
Console.WriteLine("PatchAsync Action : {0}", action);
//Console.WriteLine(item.ToString());
return httpClient.PatchAsync(Directus.serverUrl + action , content);
}
}
【讨论】: