Как создать файл ics из asp.net mvc для использования, например, в календаре Google?
Я пишу небольшое доказательство концепции веб-сайта, на котором календари / графики должны быть доступны для включения пользователей в приложения для телефонных / веб-календарей.
Сначала я пытаюсь с Google Calendar. Мой код нацелен на создание календаря с отдельным событием - в любое время "завтра в десять утра". Я использую dday.ical для производства ics.
Я написал код ниже и опубликован на http://mdftaxi.azurewebsites.net/
Ics можно загрузить с http://mdftaxi.azurewebsites.net/api/Calendar/1
Google, кажется, принимает календарь, когда я добавляю с URL выше.
Однако - ничего не отображается в календаре 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;