c# генерация файла ics для outlook - PullRequest
1 голос
/ 04 марта 2020

Я создал файл ashx, который генерирует файл ics для использования в outlook. Мой код для 1 календаря работал нормально. Теперь я добавил тот факт, что страница Ashx принимает гид, который проверяет в базе данных, какой календарь он должен сгенерировать.

Чтобы люди могли добавлять несколько календарей из одного файла Ashx, добавляя другой гид в конце этого. Проблема сейчас в том, что первый календарь генерирует нормально, а второй выходит из строя. Я вижу, что он достиг моей точки останова в файле Ashx, и он генерирует все нормально, но, похоже, Outlook его не получает. Я предположил, что outlook заблокировал создание файла ics, потому что для него это дважды одинаковая ссылка.

Затем я реализовал перенаправление url на своем веб-сервере, чтобы он выглядел как несколько разных URL для outlook. Опять же, я вижу, что он дважды достигает контрольных точек, но генерируется только 1 календарь, а другой выдает ошибку «не удается проверить или добавить календарь в Outlook ...». И ссылка действительна.

Outlook по-прежнему блокирует refre sh нескольких календарей, потому что он взят из одного и того же файла Ashx?

public class CalendarService : IHttpHandler
    {
        private readonly OutlookCalendarDomainLogic _domainLogic = InitializeDomainLogic();

        private static OutlookCalendarDomainLogic InitializeDomainLogic()
        {
            var repository = new OutlookCalendarRepository();
            OutlookCalendarDomainLogic logic = new OutlookCalendarDomainLogic(repository);
            return logic;
        }

        public void ProcessRequest(HttpContext context)
        {
            if (!Guid.TryParse(context.Request["Guid"], out Guid guid))
            {
                return;
            }

            var co = _domainLogic.GetOutlookCalendarByGuid(guid);

         ..... Event generation code
//send the calendar item to the browser
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ContentType = "text/calendar";
            HttpContext.Current.Response.AddHeader("content-length", CalendarItem.Length.ToString());
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=\"" + CalendarName + ".ics\"");
            HttpContext.Current.Response.Write(CalendarItem);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest();
}

Есть идеи?

...