Как добавить заголовки в HTTPContext Response в ASP.NET MVC 3? - PullRequest
12 голосов
/ 30 июня 2011

У меня есть ссылка для скачивания на моей странице, на файл, который я генерирую по запросу пользователя.Теперь я хочу отобразить размер файла, чтобы браузер мог отобразить, сколько осталось загрузить.Как решение, я думаю, что добавление заголовка к запросу будет работать, но сейчас я не знаю, как это сделать.

Вот мой код попытки:

public FileStreamResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID)
        {

                SignalRepository sr = new SignalRepository();
                var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id);
                Stream stream = new MemoryStream(file);

                HttpContext.Response.AddHeader("Content-Length", file.Length.ToString());

                return File(stream, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx");


        }

Когдапроверил на fiddler, он не отображал заголовок Content-Length.Ребята, вы можете мне помочь?

Ответы [ 6 ]

15 голосов
/ 01 июля 2011

Попробуйте использовать

HttpContext.Response.Headers.add("Content-Length", file.Length.ToString());
14 голосов
/ 30 июня 2011

Попробуйте HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);

4 голосов
/ 30 июня 2011

Можете ли вы попробовать следующий код и посмотреть, работает ли он?

public FileStreamResult Index()
{
    HttpContext.Response.AddHeader("test", "val");
    var file = System.IO.File.Open(Server.MapPath("~/Web.config"), FileMode.Open);
    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString());
    return File(file, "text", "Web.config");
}

"Это работает на моей машине"

И я пробовал без заголовка Content-length иВ любом случае Fiddler сообщает заголовок длины контента.Я не думаю, что это необходимо.

1 голос
/ 30 июня 2011

Это должно решить эту проблему, так как я думаю, что нет необходимости использовать FileStreamResult, когда вы можете использовать byte[] напрямую.

public FileContentResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID)
{
    SignalRepository sr = new SignalRepository();
    var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id);

    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString());

    return File(file, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx");
}

Обратите внимание на FileContentResult тип возврата.

0 голосов
/ 29 марта 2019

Попробуйте использовать HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);

0 голосов
/ 30 июня 2011

Не уверен, что еще может быть не так, но длина содержимого должна быть размером двоичного файла, а не длиной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...