0

一个在 VS 2012 中运行良好的 ASP.NET MVC 解决方案在 2019 年停止运行,我找不到改变它的原因。

最初我在第一个块中有代码 - 异步任务将转到文件存储并检索文件,然后使用控制器自动调用的 FileResult 将文件发送到浏览器。在对 VS 2019 进行了非常痛苦的更改并更新了所有内容(.NET 运行时、第 3 方库等)之后,我让应用程序再次运行,除了这个问题。

我尝试创建一个新的 FileStreamResult (位于第二个块中),但也没有被调用。当我点击一个调用这个的链接时:

    <a href="/Cert/File?folder=&filename=@HttpUtility.UrlEncode(FilePath)" ...

它给了我一个空白页,而不是像以前那样下载文件。


        public async Task FileAsync(string folder, string filename)
        {
            AsyncManager.OutstandingOperations.Increment();

            var ReadObjectTask = _fileStorageProvider.ReadObjectDataAsync(folder, filename);
            Stream ROResult = await ReadObjectTask;
            AsyncManager.Parameters["stream"] = ROResult;
            AsyncManager.Parameters["filename"] = filename;

            AsyncManager.OutstandingOperations.Decrement();

        }
        public FileResult FileCompleted(Stream stream, string filename)
        {
            if (stream == null)
            {
                return File(Server.MapPath(Url.Content("~/Content/bad_file.png")), "image/png");
            }
            var file = new FileStreamResult(stream, MIMEAssistant.GetMIMEType(filename));
            if (filename.Contains("/"))
            {
                filename = filename.Split('/').Last();
            }
            file.FileDownloadName = filename;
            return file;
        }

这是我尝试的 FileStreamResult:

        public System.Web.Mvc.FileStreamResult FileCompleted(Stream stream, string contentType, string filename)
        {
            if (stream == null)
            {
                string bFile = Server.MapPath(Url.Content("~/Content/bad_file.png"));
                Stream blankfile = System.IO.File.OpenRead(bFile);
                return File(blankfile, MIMEAssistant.GetMIMEType(bFile), System.IO.Path.GetFileName(bFile));
            }
            if (filename.Contains("/"))
            {
                filename = filename.Split('/').Last();
            }
            return File(stream, MIMEAssistant.GetMIMEType(filename), filename);
        }

(filename.Contains 部分是前任的旧代码,我只需要用 Path.GetFileName 替换它 - 抱歉,我在发布之前没有清理它。)

我决定将 Async Task 设为一种类型,并将流处理移到该过程中以解决我的问题。我不知道为什么 2012 年工作的异步任务在 2019 年停止了。

public async Task<FileResult> FileAsync(string folder, string filename)
        {
            AsyncManager.OutstandingOperations.Increment();

            var ReadObjectTask = _fileStorageProvider.ReadObjectDataAsync(folder, filename);
            Stream ROResult = await ReadObjectTask;
            AsyncManager.Parameters["stream"] = ROResult;
            AsyncManager.Parameters["filename"] = filename;
            AsyncManager.OutstandingOperations.Decrement();

            if (ROResult == null)
            {
                return File(Server.MapPath(Url.Content("~/Content/bad_file.png")), "image/png");
            }
            var file = new FileStreamResult(ROResult, MIMEAssistant.GetMIMEType(filename));
            file.FileDownloadName = System.IO.Path.GetFileName(filename);
            return file;

        }
4

0 回答 0