файл ics не загружается веб-браузером - PullRequest
0 голосов
/ 03 апреля 2019

Файл Ics не загружается браузером, я использовал iCal.NET для создания файла ics, и код в порядке, но файл ics не загружается. Как я могу загрузить это как приложение? Я имею в виду Как сделать файл .ics доступным для скачивания, чтобы я мог загрузить его на свой диск и затем открыть в Outlook, чтобы добавить в календарь.

Мой код:

var calendar = new Ical.Net.Calendar();

calendar.Events.Add(new Event
    {
        Class = "PUBLIC",
        Summary = Summary,
        Created = new CalDateTime(DateTime.Now),
        Description = title,
        Start = new CalDateTime(Convert.ToDateTime(EventStart)),
        End = new CalDateTime(Convert.ToDateTime(EventEnd)),
        Sequence = 0,
        Uid = Guid.NewGuid().ToString(),
        Location = Location,
    });

var serializer = new CalendarSerializer(new SerializationContext());
var serializedCalendar = serializer.SerializeToString(calendar);
var bytesCalendar = Encoding.UTF8.GetBytes(serializedCalendar);

return File(bytesCalendar, "text/calendar", "event.ics");

В ответ браузера я получаю следующее сообщение:

BEGIN:VCALENDAR
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 2.2//EN
VERSION:2.0
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20190403T191521
DESCRIPTION:Inspection of property: 6 Dight Avenue Balwyn North 3104
DTEND:20190413T110000
DTSTAMP:20190403T111521Z
DTSTART:20190413T103000
LOCATION:-37.797534\, 145.079921
SEQUENCE:0
SUMMARY:Inspection of property: 6 Dight Avenue Balwyn North 3104
UID:d977d4c7-2a0d-453e-940f-d7313e35b197
END:VEVENT
END:VCALENDAR

1 Ответ

0 голосов
/ 08 апреля 2019

Вот мое решение, которое сработало для меня:

        StringBuilder sb = new StringBuilder();

        //start the calendar item
        sb.AppendLine("BEGIN:VCALENDAR");
        sb.AppendLine("VERSION:2.0");
        sb.AppendLine("PRODID:propertyqueen.com");
        sb.AppendLine("CALSCALE:GREGORIAN");
        sb.AppendLine("METHOD:PUBLISH");

        //create a time zone if needed, TZID to be used in the event itself
        sb.AppendLine("BEGIN:VTIMEZONE");
        sb.AppendLine("BEGIN:STANDARD");

        sb.AppendLine("TZID:Australia/Sydney");
        sb.AppendLine("TZOFFSETTO:+1000");
        sb.AppendLine("TZOFFSETFROM:+1000");

        sb.AppendLine("END:STANDARD");
        sb.AppendLine("END:VTIMEZONE");

        //add the event
        sb.AppendLine("BEGIN:VEVENT");

        //without timezones
        sb.AppendLine("DTSTART:" + EventStartDateTime.ToString("yyyyMMddTHHmm00"));
        sb.AppendLine("DTEND:" + EventEndDateTime.ToString("yyyyMMddTHHmm00"));
        sb.AppendLine("SUMMARY:" + Summary + "");
        sb.AppendLine("LOCATION:" + Location + "");
        sb.AppendLine("DESCRIPTION:" + Description + "");
        sb.AppendLine("PRIORITY:3");
        sb.AppendLine("END:VEVENT");
        sb.AppendLine("END:VCALENDAR");


        //send the calendar item to the browser
        Response.ClearHeaders();
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "text/calendar";
        Response.AddHeader("content-length", sb.Length.ToString());
        Response.AddHeader("content-disposition", "attachment;filename=" + FileName);

        Response.Write(sb.ToString());
        Response.Flush();
        Response.End();

        var bytes = Encoding.UTF8.GetBytes(sb.ToString());
        return File(bytes, "text/calendar", FileName); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...