Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么返回MemoryStream设置结束位置_C#_Asp.net Core - Fatal编程技术网

C# 为什么返回MemoryStream设置结束位置

C# 为什么返回MemoryStream设置结束位置,c#,asp.net-core,C#,Asp.net Core,我注意到返回MemoryStream会将其位置重置为“最后”位置。为什么呢 在工作方法中测试时,在返回之前,我显式地将位置设置为0 myStream.position = 0; // I allso tried myStream.Seek(0, SeekOrigin.Begin); 但在两种情况下检查位置时,位置未设置为0 编辑(认为这是一个更理论化的问题,所以我没有费心添加所有代码,但现在开始) 然后我试着测试这个方法 [Test] public Task GenerateOpenXmlFi

我注意到返回MemoryStream会将其位置重置为“最后”位置。为什么呢

在工作方法中测试时,在返回之前,我显式地将位置设置为0

myStream.position = 0; // I allso tried myStream.Seek(0, SeekOrigin.Begin);
但在两种情况下检查位置时,位置未设置为0

编辑(认为这是一个更理论化的问题,所以我没有费心添加所有代码,但现在开始)

然后我试着测试这个方法

[Test]
public Task GenerateOpenXmlFileAsStremTest()
{
    using (Context context = new Context (_options))
    {
        context.Database.EnsureCreated();
    }

    using (Context context = new Context (_options))
    {
        _target = new Service(_mapper, _mockedLogger.Object, _dbContext, _mockedNotificationService.Object);
        MemoryStream result = _target.GenerateOpenXmlFileAsStrem();

        Assert.NotNull(result);
        Assert.Equal(0, result.Position); // somehow this is not true
    }
}

如果SpreadsheetDocument在Dispose时写入流,则会导致该结果。在重新定位流之前,请尝试显式调用Flush/Close/Dispose,例如:

document.Dispose();
memoryStream.Position = 0;
return memoryStream;

每当有东西从流中读取(或写入)时,位置就会改变。在普通方法中,如果
返回流,则流不会发生任何变化,但是由asp.net控制的方法可以从流中读取数据以访问其数据。
document.Dispose();
memoryStream.Position = 0;
return memoryStream;