2015-07-03 157 views
0

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

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

更新: 我发现了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 ......

提前致谢!

更新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:正文包含特殊字符“éàê...”,这就是内容长度部分错误的原因!

+1

您提供的信息太少。您要发送给此网址的网址是什么?什么是服务器返回的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);