从CalDav API创建新日历

时间:2015-07-03 15:30:17

标签: api httprequest caldav sabredav

我正在尝试使用SabreDav在我校长的主文件夹中创建一个新日历。

我找不到如何实现这一点 - 它甚至可能吗?

更新: 我发现了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失败,请求已取消请求......

提前致谢!

更新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();

我收到的错误消息是

  

请求已中止:请求已取消

在服务器端,这是访问日志:

  

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

错误日志为空...所以看起来我收到的“错误请求”响应在准备请求时没有被捕获?!

更新3:正文包含特殊字符“éàê...”,这就是为什么内容长度部分错了!

1 个答案:

答案 0 :(得分:1)

我将评论作为答案:问题确实是Request.ContentLength = body.Length

更正后的代码是:

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