我计划为 Synology 日历 API 提供 C# 客户端,并且我正在使用 Synology 直接提供的文档。到目前为止,我能够在 C# 中执行以下操作(以及用于测试的 Postman):
添加事件对我不起作用。我正在尝试以下请求(当然,密码和其他内容已替换):
GET {{baseUrl}}/webapi/entry.cgi?api=SYNO.Cal.Event&version=1&method=create&cal_id=test&description=Test2&dtstart=TZID%3dEurope%2fBerlin%3a20231003T210000&dtend=TZID%3dEurope%2fBerlin%3a20231003T230000&is_all_day=false&is_repeat_evt=false&evt_location=Test3&original_cal_id=test2&summary=Test4&transp=TRANSPARENT&tzid=Europe%2fBerlin
{{baseUrl}}
是 Postman 变量,应替换为 Synology 工作站基地址,例如 http://192.168.2.205:5000
。
我添加的唯一自定义标头是您从登录过程中获得的
X-SYNO-TOKEN
的值。
通过此请求,我得到的结果表明没有成功和错误代码
9007
。但是,此错误代码未记录在 Synology API 说明中。我不太确定我做错了什么,我已经使用较少的参数进行了测试,并且使用 POST
而不是 GET
(这会导致错误,表明不支持该方法)。我已经检查了一些 Synology 论坛条目和其他页面,但目前还没有真正找到任何相关内容。
有关 API 的其他“特殊”发现:
GET
请求(更新例如作为 GET
请求)POST
而不是 GET
或类似的东西)我现在通过自定义创建的 NuGet 包使用普通 CalDav https://github.com/SeppPenner/CalDAVNet。
代码示例如下:
using Ical.Net.CalendarComponents;
/// <summary>
/// The main method.
/// </summary>
public static async Task Main()
{
// Create client.
var calDavClient = new Client("http://192.168.2.2/caldav.php/user/someid", "user", "password");
// Get all calendars for the user.
var calendars = await calDavClient.GetAllCalendars();
// Get the calendar by the uid.
var calendarByUid = await calDavClient.GetCalendarByUid("/caldav.php/user/uniqueid/");
// Get the default calendar.
var defaultCalendar = await calDavClient.GetDefaultCalendar();
// Add an event.
var calendarEvent = new CalendarEvent();
var added = await calDavClient.AddOrUpdateEvent(calendarEvent, new Ical.Net.Calendar());
// Delete an event.
var deleted = await calDavClient.DeleteEvent(calendarEvent);
}