c# - reunion - icalendar outlook
Crear archivo.ics de Outlook en C#con hipervínculo dentro (1)
El código siguiente se supone que generará un archivo .ics con un enlace incrustado dentro. Genera los .ics pero el problema es que el enlace muestra el código html no el hipervínculo. Cualquier idea puede ayudar.
(Este es un reenvío ya que mi publicación anterior no muestra el código completo) Gracias.
public ActionResult ExportToOutlook(Guid id)
{
var query = new GetActivityByIdQuery();
var queryResult = query.Execute(id);
var outlookCalendarFileCreator = new OutlookCalendarFileCreator();
var contentData = outlookCalendarFileCreator.CreateOutlookCalendarFile(queryResult);
var fileName = String.Format("Activity.ics", queryResult.ActivityType.Name, queryResult.Date) ;
return File( contentData,"text/plain", queryResult.Notes + fileName);
}
public class OutlookCalendarFileCreator
{
public Byte[] CreateOutlookCalendarFile(ActivityDetailsResponseDto responseDto)
{
byte[] contentData;
HttpRequest request = System.Web.HttpContext.Current.Request;
string baseUrl = request.Url.GetLeftPart(UriPartial.Authority);
var hLink = string.Format("{0}/Activities/Details?id={1}", baseUrl, responseDto.Id);
var sb = new StringBuilder();
sb.Append(@"X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2//EN"">/n<HTML><BODY>");
sb.Append(string.Format("<a href=''{0}''>{1}</a>", hLink, responseDto.Notes));
sb.Append("</BODY></HTML>");
using (var memoryStream = new MemoryStream())
{
using (var writer = new StreamWriter(memoryStream))
{
writer.AutoFlush = true;
//HEADER
writer.WriteLine("BEGIN:VCALENDAR");
writer.WriteLine("VERSION:1.0");
writer.WriteLine("BEGIN:VEVENT");
//BODY
writer.WriteLine("DTSTART:" + responseDto.Date.ToUniversalTime().ToString("o"));
writer.WriteLine("DTEND:" + responseDto.Date.AddHours(1).ToUniversalTime().ToString("o"));
writer.WriteLine("SUMMARY:" + responseDto.ActivityType.Name);
writer.WriteLine("DESCRIPTION:" + sb.ToString());
//FOOTER
writer.WriteLine("END:VEVENT");
writer.WriteLine("END:VCALENDAR");
writer.Flush();
contentData = new byte[(int)memoryStream.Length];
memoryStream.Position = 0;
memoryStream.Read(contentData, 0, (int)memoryStream.Length);
return contentData;
}
}
}
De nuevo, tiene ":" después de DESCRIPTION. Necesitas tener ";" - punto y coma vs. colon
sb.Append(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2//EN"">/n<HTML><BODY>");
sb.Append(string.Format("<a href=''{0}''>{1}</a>", hLink, responseDto.Notes));
sb.Append("</BODY></HTML>");
...
writer.WriteLine("DESCRIPTION;X-ALT-DESC;FMTTYPE=text/html:" + sb.ToString());