MVC 3 ContentResult二进制文件与firefox奇怪的问题

时间:2011-05-13 17:52:24

标签: caching asp.net-mvc-3 file-io

我有一个MVC 3应用程序,允许用户上传带有一些数据输入内容的文件。我已经设置了一个控制器来获取这些文档并将其缓存到用户身上,如此

[OutputCache(Duration = 1200, VaryByParam = "id")]
public ContentResult GetNarrative(int id)
{
    Response.Clear();
    Response.BufferOutput = true;
    Response.ContentType = "application/octet-stream";

    var narrative = attachRepo.GetNarrative(id);
    if (narrative == null || narrative.Narrative == null)
        return null;

    Response.AddHeader("Content-Disposition", 
        string.Format("attachment;filename={0}", 
            Server.UrlEncode(narrative.Filename)));

    Response.OutputStream.Write(narrative.Narrative.ToArray(), 
        0, narrative.Narrative.ToArray().Length);
    Response.OutputStream.Flush();
    return Content("");
}

这很好用,有趣的是,当我有输出缓存行时,我的firefox下载对话框看起来像这样

open with chrome?

然而,当我注释掉输出缓存行时,它看起来像预期的对话框

open in word like expected

这不是一个真正的阻塞问题,因为它在IE中运行得很好,Chrome默认只下载,但我很好奇为什么会发生这种情况,如果有人经历过这个并且解决了它。

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现firefox忽略了附件中的文件名。它倾向于使用他的URL来设置文件名。

尝试放在URL的末尾?filename.docx

看看它是否能解决问题。