Результат файла из контроллера MVC asp.net возвращает html-строку вида вместо файла - PullRequest
0 голосов
/ 01 июля 2019

У меня очень странное поведение в устаревшем репозитории, который я клонировал и пытаюсь работать с ним.

Существует действие для загрузки файлов (файлы размещаются в AWS): (избыточный код для ясности опущен).

public virtual async Task<ActionResult> Entity(EntityModel entity)
        {
               using (Stream stream = downloadFileObject(model.Updates[GetUpdateNumberFromQueryString()].UpdateLink))
                using (MemoryStream ms = new MemoryStream())
                {
                    await stream.CopyToAsync(ms).ConfigureAwait(false);
                    return File(ms.ToArray(), "application/octet-stream", "The file.exe");
                }
        }

Метод DownloadFileObject подключается к AWS, создает запрос и возвращает поток ответов:

public Stream GetS3FileObject(string objectKey, string fileName)
    {
        GetObjectRequest request = new GetObjectRequest
        {
            BucketName = bucketName,
            Key = objectKey,
        };
        GetObjectResponse response = s3Client.GetObject(request);
        return response.ResponseStream;
    }

Это возвращает правильный поток без ошибок, я вижу, чтодлина указывает что-то около 35 мб, что является правильным размером файла, который я получаю.

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

Вместо того, чтобы получить файл, браузер получает текстовый файл размером 110 КБ, который очень похож на мой текущий просмотр HTML ...

Возвращенный HTML-код содержит следующее сообщение об ошибке(кроме обычного контента сайта)

Ошибка выполнения дочернего запроса для обработчика System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper.OutputStream недоступен, когда используется пользовательский TextWriter.

Я попробовал несколько подходов, где первый и самый очевидный был просто:

var stream = DownloadFileObject(model.Updates[GetUpdateNumberFromQueryString()].UpdateLink);
return File(stream, "application/octet-stream", "The file.exe");

Затем я попытался скопировать этот потокв байтовый массив и вернуть его - однако, во всех случаях результат один и тот же.До последнего момента отладчик показывает, что мой поток / байтовый массив имеет размер 35 МБ.

Вот заголовки:

enter image description here

enter image description here

Кроме того, визуализированный HTML-код кнопки загрузки выглядит следующим образом:

<a href="/support/product-support/software/TheProductName" class="btn btn-default">Download update</a>

И кнопка создается впросмотр без каких-либо помощников HTML (Action.Link () и т. д.)

<a href="@updateVersions.Link" class="btn btn-default">@Model.SiteLabelDownloadUpdate</a>

Есть идеи, что может происходить?

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