2015-07-03 9 views
0

Я пытаюсь создать новый календарь в домашней папке моего директора с помощью SabreDav.Создайте новый календарь из CalDav API

Я не мог найти, как достичь этого - возможно ли это?

UPDATE: я узнал о методе MKCALENDAR, но следующие возвращает «заброшены» ошибка запроса:

<C:mkcalendar xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:ical="http://apple.com/ns/ical/" >" 
    <D:set> 
     <D:prop> 
      <D:displayname>cal Display Name</D:displayname> 
      <ical:calendar-color>cal Color</ical:calendar-color> 
     </D:prop> 
    </D:set> 
</C:mkcalendar> 

Отправка его с HttpWebRequest терпит неудачу с отмененным запросом messgage ...

Заранее спасибо!

UPDATE 2: Некоторые подробности:

HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create("http://my.sabredavcalendar.srv/calendarserver.php/calendars/admin/my_new_calendar/"); 
Request.Method = "MKCALENDAR"; 
Request..Credentials = new NetworkCredentials("usr", "pwd"); 
Request.ContentType = "application/xml"; 
string body = "<C:mkcalendar [.....] </C:mkcalendar>"; 
Request.ContentLength = body.Length; 
// --- 
// The using block throws an error... 
using (Stream reqStream = Request.GetRequestStream()) { 
    byte[] encodedBody = Encoding.UTF8.GetBytes(body); 
    reqStream.Write(encodedBody, 0, encodedBody.Length); 
    reqStream.Close(); 
} 
Response = (HttpWebResponse)Request.GetResponse(); 

Сообщение об ошибке я получаю

The request was aborted: The request was canceled

На стороне сервера, вот журнал регистрации доступа:

192.168.1.200 - - [06/Jul/2015:09:51:48 +0200] "MKCALENDAR /calendarserver.php/calendars/admin/my_new_calendar/ HTTP/1.1" 400 25 "-" "-"

Журнал ошибок пуст ... поэтому кажется, что я получаю ответ «плохой запрос», который не пойман при подготовке re квест ?!

ОБНОВЛЕНИЕ 3: тело содержит специальные символы как «éàê ...», поэтому часть contentlength была неправильной!

+1

Вы обеспечиваете слишком мало информации. Каков URL, на который вы отправляете это? Что такое ошибка HTTP, возвращаемая сервером? P.S .: «Современный» способ создания календарей осуществляется через MKCOL, хотя все серверы также должны поддерживать MKCALENDAR. – hnh

+0

Я добавил столько подробностей, сколько мог - см. ОБНОВЛЕНИЕ 2 – neggenbe

+2

Вам нужно выяснить способ включения большего количества регистрации на вашем сервере, чтобы выяснить, почему он выбрасывает 400. Вы опустили свою переменную тела, так что, возможно, что-то не так там. P.S .: Request.ContentLength = body.Length неверна, вам нужно установить длину содержимого в длину байта UTF8, хотя это не должно иметь значения в вашем примере. – hnh

ответ

1

Я принимаю комментарий hnh как ответ: проблема была действительно Request.ContentLength = body.Length.

Исправленный код:

Request.ContentLength = Encoding.UTF8.GetByteCount(body);