在MVC 4中返回下载在Android上不起作用

时间:2013-11-09 01:32:59

标签: c# android asp.net-mvc asp.net-mvc-4

我是第一次发布海报,请原谅我对发布技术的无知。我一直在寻找几个小时,似乎无法找到答案,所以希望房间里聪明的人可以帮忙吗?我有一个用.net MVC 4编写的Web应用程序,它连接到多个云服务API。然后,用户可以从此Web应用程序下载文件。我已经能够在除android之外的所有平台上使用它。当我尝试在Android上下载文件时,它会挂起并最终失败。下载时有文件名,但说< unknown>。有人有解决方案吗?这是我正在使用的代码:

if (String.IsNullOrEmpty(type))
{
    type = "application/octet-stream";
}

byte[] file = openDropBoxFile(path, filename);

if (file != null)
{                    
    return File(file, type, filename);
}

感谢Slack Shot,遗憾的是它没有改变android上的行为。以下是我在错误地实施您的解决方案时更改代码的方法:

if (String.IsNullOrEmpty(type))
{
    type = "application/octet-stream";
}        

byte[] file = openDropBoxFile(path, filename);
if (file != null)
{
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = filename,
        Inline = false,
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(file, type);
}

有关该问题的更多信息。我能够在Firefox for Android上运行下载,但不能使用原生浏览器或谷歌Chrome for Android。

我上一次尝试报告的标题,(我也试过没有长度,而是使用了分块传输编码):

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 45113
Content-Type: application/pdf
Server: Microsoft-IIS/8.0
Content-Disposition: attachment; filename="testfile.pdf"
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 09 Nov 2013 17:55:40 GMT

更新:我们已经解决了部分问题!!

如果我们关闭SSL,则下载工作正常。有人碰到这个吗?

1 个答案:

答案 0 :(得分:0)

您可能想尝试添加Content-Disposition标头。

       var cd = new System.Net.Mime.ContentDisposition
        {
                // for example foo.bak
                FileName = "Summary.csv",

                // always prompt the user for downloading, set to true if you want 
                // the browser to try to show the file inline
                Inline = false,
        };
        Response.AppendHeader("Content-Disposition", cd.ToString());
        return File(model.SummaryDownload.Content().ToArray(), "text/csv");