相关疑难解决方法(0)

从动作返回文件时,流是否会被处置?

我正在写一个字符串,MemoryStream我需要将流返回到Controller Action,所以我可以将其作为文件发送下载.

通常,我将Stream包装在using语句中,但是,在这种情况下,我需要返回它.我退货后还能处理吗?或者我需要以某种方式自行处理它?

//inside CsvOutputFormatter
public Stream GetStream(object genericObject)
{
    var stream = new MemoryStream();
    var writer = new StreamWriter(stream, Encoding.UTF8);
    writer.Write(_stringWriter.ToString());
    writer.Flush();
    stream.Position = 0;
    return stream;
}
Run Code Online (Sandbox Code Playgroud)

Controller返回文件的Action:

[HttpGet]
[Route("/Discussion/Export")]
public IActionResult GetDataAsCsv()
{
    var forums = _discussionService.GetForums(_userHelper.UserId);

    var csvFormatter = new CsvOutputFormatter(new CsvFormatterOptions());

    var stream = csvFormatter.GetStream(forums);
    return File(stream, "application/octet-stream", "forums.csv");

    //is the stream Disposed here automatically?
}
Run Code Online (Sandbox Code Playgroud)

c# memorystream streamwriter asp.net-core-mvc asp.net-core

16
推荐指数
1
解决办法
3758
查看次数

file()在asp.net mvc中关闭流吗?

我想知道你是否做了类似的事情

public FileResult result()
{
   Stream stream = new Stream();
   return File(stream,"text/html","bob.html");
}
Run Code Online (Sandbox Code Playgroud)

如果File()会关闭你的流?因为我试图将"stream"放在using语句中,但它总是给我一个错误,说流已关闭.

public FileResult result()
{
    using(Stream stream = new Stream())
    {
       return File(stream,"text/html","bob.html");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc

15
推荐指数
1
解决办法
2653
查看次数

为什么关闭流上的ASP.NET MVC控制器FileStreamResult错误?

我试图从派生自列表的MVC控制器返回csv文件。基于结合我从文档和SO问题中读取的内容,我提出了以下控制器代码。我一定想念一些东西,因为我因“无法访问封闭的流”而出现黄屏死机...

public class ConsumersFileController : Controller
{
    private readonly TDCContext _db = new TDCContext();


    public ActionResult Index()
    {
        IEnumerable<Consumer> list = _db.Consumers.ToList();

        //put List in memory stream object
        MemoryStream memoryStream = new MemoryStream();
        using (memoryStream)
        {
            //return memory stream as file stream result:
            using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream, System.Text.Encoding.UTF8, true))
            {
                foreach (var item in list)
                {
                    var itemBytes = item.Serialize();
                    binaryWriter.Write(itemBytes.Length);
                    binaryWriter.Write(itemBytes);

                }

                FileStreamResult fileStream =
                    new FileStreamResult(memoryStream, "application/txt") {FileDownloadName = "zips.csv"};

                return fileStream;
            }
        }
    }

    protected …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc

2
推荐指数
1
解决办法
1580
查看次数