Как добавить заголовки в HTTPContext Response в ASP.NET MVC 3?

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

Вот мой код:

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");


        }

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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 в любом случае сообщает заголовок длины контента. Я не думаю, что это необходимо.

Ответ 4

Это должно решить его, поскольку я думаю, что нет необходимости использовать 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.

Ответ 5

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

Ответ 6

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