Информация об изменениях

Сообщение Создание календаря по протоколу CALDAV на yandex mail.ru от 26.04.2022 3:31

Изменено 26.04.2022 4:53 Разраб

Создание календаря по протоколу CALDAV на yandex mail.ru
По теме: возможно ли создание календаря по протоколу CALDAV на yandex mail.ru?
И еще вопрос
 HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create("https://caldav.yandex.ru/calendars/login@yandex.ru/events-cal1");
    Request.Method = "MKCALENDAR";
    Request.Credentials = new NetworkCredential("login", "password");
    Request.ContentType = "application/xml";
    Request.SendChunked = true;
    Request.TransferEncoding = "utf-8";
    byte[] encodedBody = Encoding.UTF8.GetBytes(body);
    Request.ContentLength = encodedBody.Length;

    using (Stream reqStream = Request.GetRequestStream())
    {
        reqStream.Write(encodedBody, 0, encodedBody.Length);
        reqStream.Close();
    }
  
    var response = (HttpWebResponse)Request.GetResponse();
    String responseString = string.Empty;
    using (Stream stream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
        responseString = reader.ReadToEnd();
    }

Получаю: The remote server returned an error: (501) Not Implemented.
Что как бы намекает, что яндекс не позволяет создавать календари(но это не точно, т.к. инфы на сайте нет подробной).

Если же использовать современный подход:
    using var client = new HttpClient();
    var login = Convert.ToBase64String(Encoding.ASCII.GetBytes("login:password"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", login);
    HttpRequestMessage message = new HttpRequestMessage(new HttpMethod("MKCALENDAR"), "https://caldav.yandex.ru/calendars/login@yandex.ru/events-cal1")
    {
        Content = new StringContent(data, Encoding.UTF8, "application/xml")
    };
    message.Headers.Authorization = new AuthenticationHeaderValue("Basic", login);
    using var response = await client.SendAsync(message);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();

получаю: Response status code does not indicate success: 500 (Server Error).
Где я ошибся?
Сам календарь формирую при помощи Ical.Net
Сами события нормально считываются обычным client.GetAsync.
за основу взял пример

UPDATE 1: OPTIONS запрос возвращает в том числе и MKCALENDAR
UPDATE 2: Нашел вот эту штуку https://github.com/ProximoSrl/CalDav. она создает календарь(видно в веб-интерфейсе),
но список "calendar-collection-set" методом "propfind" не выдает(ошибка BadRequest).
Создание календаря по протоколу CALDAV на yandex mail.ru
По теме: возможно ли создание календаря по протоколу CALDAV на yandex mail.ru?
И еще вопрос
 HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create("https://caldav.yandex.ru/calendars/login@yandex.ru/events-cal1");
    Request.Method = "MKCALENDAR";
    Request.Credentials = new NetworkCredential("login", "password");
    Request.ContentType = "application/xml";
    Request.SendChunked = true;
    Request.TransferEncoding = "utf-8";
    byte[] encodedBody = Encoding.UTF8.GetBytes(body);
    Request.ContentLength = encodedBody.Length;

    using (Stream reqStream = Request.GetRequestStream())
    {
        reqStream.Write(encodedBody, 0, encodedBody.Length);
        reqStream.Close();
    }
  
    var response = (HttpWebResponse)Request.GetResponse();
    String responseString = string.Empty;
    using (Stream stream = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
        responseString = reader.ReadToEnd();
    }

Получаю: The remote server returned an error: (501) Not Implemented.
Что как бы намекает, что яндекс не позволяет создавать календари(но это не точно, т.к. инфы на сайте нет подробной).

Если же использовать современный подход:
    using var client = new HttpClient();
    var login = Convert.ToBase64String(Encoding.ASCII.GetBytes("login:password"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", login);
    HttpRequestMessage message = new HttpRequestMessage(new HttpMethod("MKCALENDAR"), "https://caldav.yandex.ru/calendars/login@yandex.ru/events-cal1")
    {
        Content = new StringContent(data, Encoding.UTF8, "application/xml")
    };
    message.Headers.Authorization = new AuthenticationHeaderValue("Basic", login);
    using var response = await client.SendAsync(message);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();

получаю: Response status code does not indicate success: 500 (Server Error).
Где я ошибся?
Сам календарь формирую при помощи Ical.Net
Сами события нормально считываются обычным client.GetAsync.
за основу взял пример

UPDATE 1: OPTIONS запрос возвращает в том числе и MKCALENDAR
UPDATE 2: Нашел вот эту штуку https://github.com/ProximoSrl/CalDav. она создает календарь(видно в веб-интерфейсе),
но список "calendar-collection-set" методом "propfind" не выдает(ошибка BadRequest).
Внезапно! по get на адрес https://caldav.yandex.ru/calendars/login@yandex.ru/ получил урлы календарей!