0

我有一个 ASP.Net MVC 4 应用程序正在下载一个空文件。我错过了什么?

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public FileStreamResult ICS()
    {
        var memoryStream = new MemoryStream();
        StreamWriter sw = new StreamWriter(memoryStream);
        sw.WriteLine(@"BEGIN:VCALENDAR");
        sw.WriteLine(@"VERSION:2.0");
        sw.WriteLine(@"PRODID:-//www.marudot.com//iCal Event Maker");
        sw.WriteLine(@"BEGIN:VEVENT");
        sw.WriteLine(@"DTSTAMP:20141111T165545Z");
        sw.WriteLine(@"UID:20141111T165545Z-1194755835@marudot.com");
        sw.WriteLine(@"DTSTART;TZID=""America/Chicago"":20141114T080000");
        sw.WriteLine(@"DTEND;TZID=""America/Chicago"":20141114T120000");
        sw.WriteLine(@"SUMMARY:Bobby's Big Bash");
        sw.WriteLine(@"DESCRIPTION:test");
        sw.WriteLine(@"LOCATION:test");
        sw.WriteLine(@"END:VEVENT");
        sw.WriteLine(@"END:VCALENDAR");

        sw.Flush();
        return new FileStreamResult(memoryStream, "text/calendar") { FileDownloadName = "test.ics" };
    }

}

看法:

<h2>Index</h2>
@Html.ActionLink("ical event", "ICS");

单击该链接会下载一个空的 ICS 文件。

4

2 回答 2

3

刷新后将 MemoryStream 对象的 Position 属性设置为 0。

于 2014-11-12T07:54:57.013 回答
1

只是一个猜测-在您下载文件之前,MemoryStream 已经超出范围。也许看看当您将内容写入实际文件时会发生什么,然后重新读取该文件。Path.GetTempFileName();对于写出临时文件可能很有用。

于 2014-11-11T17:52:21.593 回答