我如何从asp.net mvc生成ics文件以供在谷歌日历中使用?

时间:2015-02-22 22:01:14

标签: c# asp.net asp.net-mvc calendar dday

我正在为一个网站写一个小概念验证,其中日历/时间表应该为用户公开'包含在电话/网络日历应用程序中。

首先,我尝试使用谷歌日历。我的代码旨在创建一个带有烧烤事件的日历 - 在任何时候它都会在明天上午十点左右。#34;。我使用dday.ical来制作ics。

我已在下面编写代码并发布到 http://mdftaxi.azurewebsites.net/

可以从中下载Ics http://mdftaxi.azurewebsites.net/api/Calendar/1

当我使用上面的网址添加时,Google似乎接受了日历。

然而 - 谷歌日历中没有显示任何内容?!我做错了什么?!

感谢您的帮助,

丹麦安德斯

    public class CalendarController : ApiController
{
    public HttpResponseMessage Get(int id)
    {
        var iCal = new iCalendar
        {
            Method = "PUBLISH",
            Version = "2.0",
            Name = "Taxi" + id
        };

        var evt = iCal.Create<Event>();
        evt.Summary = "Test";
        var dt = DateTime.Today.AddDays(1).AddHours(10);
        evt.Start = new iCalDateTime(dt);
        evt.Duration = TimeSpan.FromHours(1);
        evt.Description = "This is body";
        evt.Location = "location";
        evt.IsAllDay = false;
        evt.UID = Guid.NewGuid().ToString();
        evt.Organizer = new Organizer("andersjuulsfirma@gmail.com");

        var res = new DDay.iCal.Serialization.iCalendar.iCalendarSerializer().SerializeToString(iCal);

        using (var file = new System.IO.StreamWriter(Path.GetTempPath() + "out.ics"))
        {
            file.WriteLine(res);
        }

        var result = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(res)
        };
        result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
        {
            FileName = "calendar.ics"
        };
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/calendar");
        return result;
    }
}

编辑: 找到解决方案至少它似乎可以解决这个问题,如果我有点剥离它:

        var iCal = new iCalendar
        {
            Version = "2.0"
        };

        for (var i = 0; i < 3; i++)
        {
            var evt = iCal.Create<Event>();
            evt.Summary = "Test";
            evt.Start = new iCalDateTime(DateTime.Today.AddDays(i).AddHours(20));
            evt.Duration = TimeSpan.FromHours(1);
            evt.Description = "This is body";
            evt.IsAllDay = false;
            evt.UID = Guid.NewGuid().ToString();
            evt.Organizer = new Organizer("CN=John Doe:MAILTO:john.doe@example.com");
        }

        var res = new iCalendarSerializer().SerializeToString(iCal);
        using (var file = new System.IO.StreamWriter(Path.GetTempPath() + "out.ics"))
        {
            file.Write(res);
        }

        return res;

0 个答案:

没有答案