如何使用 Synology Calendar API 在 C# 中创建事件?

问题描述 投票:0回答:1

我计划为 Synology 日历 API 提供 C# 客户端,并且我正在使用 Synology 直接提供的文档。到目前为止,我能够在 C# 中执行以下操作(以及用于测试的 Postman):

  • 登录(启用版本 2+ 并启用 Syno-Token 后,应该可以在没有启用的版本 1 中工作,但不行)
  • 退出
  • 获取API信息(无需登录)
  • 获取所有日历(例如列出所有日历)
  • 获取特定日历中某个时间范围内的所有事件
  • 设置事件数据(例如更新事件)

添加事件对我不起作用。我正在尝试以下请求(当然,密码和其他内容已替换):

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 的其他“特殊”发现:

  • API 中的所有 bool 值都必须为小写(文档中从未说明过)
  • 到目前为止,所有请求似乎都是
    GET
    请求(更新例如作为
    GET
    请求)
  • 文档很难阅读,因为示例要么不完整,要么错误(例如,用
    POST
    而不是
    GET
    或类似的东西)
c# synology synology-calendar
1个回答
0
投票

我现在通过自定义创建的 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.