【问题标题】:I am trying to provide Google Calendar with Url of Calendar served By IIS (ASP.NET)我正在尝试为 Google 日历提供由 IIS(ASP.NET)提供的日历的 URL
【发布时间】:2018-08-08 12:01:29
【问题描述】:

当我将 .ics 文件放在站点的文件夹中并使用它的 URL 时,Google 会识别它并将其可视化,但是当我尝试通过 Action 提供文件时,Google 不会做任何事情。

这就是我目前所拥有的:

        [AllowAnonymous]
    public FileResult Test()
    {
        byte[] calendarBytes = Encoding.UTF8.GetBytes(System.IO.File.ReadAllText(@"<filename>", Encoding.UTF8));

        var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = "Test.ics",
            Inline = true,
        };

        Response.AppendHeader("Content-Disposition", cd.ToString());

        return File(calendarBytes, "text/calendar");
    }

.ics 文件如下所示

BEGIN:VCALENDAR
PRODID:eTemida
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:eTemida_Web
METHOD:PUBLISH
X-WR-TIMEZONE:Europe/Sofia
BEGIN:VEVENT
DTSTART:20180301T140000Z
DTEND:20180301T143000Z
DTSTAMP:20180228T145800Z
UID:9358d70d-d1bf-45ea-8f40-321be757dda6
CREATED:20180228T145600Z
DESCRIPTION:eTemida
LASTMODIFIED:20180228T145600Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:eTemida
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20180302T123000Z
DTEND:20180302T130000Z
DTSTAMP:20180228T145800Z
UID:9cdd0d9e-891c-4b33-ada8-cf4c7b50b479
CREATED:20180228T145700Z
DESCRIPTION:eTemida
LASTMODIFIED:20180228T145700Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:eTemida
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20180302T140000Z
DTEND:20180302T143000Z
DTSTAMP:20180228T145800Z
UID:be32b65f-7435-4544-8c58-8068f8847345
CREATED:20180228T145700Z
DESCRIPTION:eTemida
LASTMODIFIED:20180228T145700Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:eTemida
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

我不知道该怎么做? 是因为它通过服务器的 FTP 和控制器的 Action 的 HTTP 提供服务吗?

编辑

我在“添加其他日历”按钮上使用“来自 URL”选项

任何帮助将不胜感激。

【问题讨论】:

  • “Google 识别它”到底是什么意思? Google 如何与这里的任何东西互动?
  • 在编写动作方法时,不要直接操作响应。这违背了使用 MVC 的意义。
  • 尝试仅将 ICS 内容呈现为文本,而不是作为附件发送以供下载。换句话说,基本上只返回一个字符串。此外,Web API 控制器可能更适合 MVC 控制器。
  • 我在“添加其他日历”按钮上使用“来自 URL”选项
  • 我建议你在你的问题中澄清这一点。接下来,查看直接提供服务与从操作提供服务时获得的响应(例如在 Fiddler 中)。

标签: c# asp.net icalendar


【解决方案1】:

解决方案

    [AllowAnonymous]
    [HttpGet]
    public HttpResponseMessage GetCalendar()
    {
        string IcsFileData = EventsManager.GenerateCalendarString();

        var result = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(IcsFileData)
        };
        result.Content.Headers.ContentDisposition =
            new ContentDispositionHeaderValue("inline")
            {
                FileName = "Calendar.ics"
            };
        result.Content.Headers.ContentType =
            new MediaTypeHeaderValue("text/calendar");

        return result;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 2011-07-10
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多