Asp.net mvc ASP.NET MVC:FileStreamResult返回的字节太多?

Asp.net mvc ASP.NET MVC:FileStreamResult返回的字节太多?,asp.net-mvc,filestream,Asp.net Mvc,Filestream,我正在调用一个MVC控制器方法。 返回类型为FileStreamResult。 在这个方法中,我以字节数组的形式创建一个图像。 我正在创建一个MemoryStream,在构造函数中传递字节数组。 然后,我返回一个新的FileStreamResult对象,其中包含内存流对象和构造函数中的“image/png”,因为我的图像是png public FileStreamResult GetImage() { ImageModel im = new ImageModel();

我正在调用一个MVC控制器方法。 返回类型为FileStreamResult。 在这个方法中,我以字节数组的形式创建一个图像。 我正在创建一个MemoryStream,在构造函数中传递字节数组。 然后,我返回一个新的FileStreamResult对象,其中包含内存流对象和构造函数中的“image/png”,因为我的图像是png

public FileStreamResult GetImage()
    {
        ImageModel im = new ImageModel();
        var image = im.GetImageInByteArray();
        var stream = new MemoryStream(image);
        return new FileStreamResult(stream, "image/png");
    }
现在,当我从这个调用中获得请求流时,我只是使用以下方法将流字符串转换为字节数组以查看图像。 然而,在这一切完成之后,我的字节数组中的位置比我从MVC控制器方法调用返回时多100多个

public static byte[] ConvertStringToBytes(string input)
    {
           MemoryStream stream = new MemoryStream();

           using (StreamWriter writer = new StreamWriter(stream))
           {
             writer.Write(input);
             writer.Flush();
           }

         return stream.ToArray();
   }
例如,在“GetImageInByteArray()”调用之后,我有了“byte[256]”。 但是当它从MVC调用返回时,我通过第二个方法转换响应字符串,结果是“byte[398]”

编辑问题 我对GetImage()控制器方法发出的web请求与我假设收到的web请求之间是否存在某种区别

我假设我从该调用接收到的是图像字节数组的内存流。 这就是为什么我只是将其转换回字节数组


我的假设错了吗?

字符串是如何编码的?在我看来,这是一个编码问题

尝试将此作为方法代码:

return (new System.Text.UTF8Encoding()).GetBytes(input);

你好

我真的很感谢你的帮助,但我决定改弦易辙。 我创建了一个transfer对象,将字节数组作为属性保存。 我将其序列化,然后将对象传递给另一端,在另一端进行反序列化,我的字节数组保持原样


我仍然不清楚HTTP请求是如何附加到正在传递的内存流上的,但我只是走了另一条路。

当MVC操作返回结果时,它会通过ASP.NET管道附加到HTTP头上,以便请求者(浏览器)能够理解如何处理响应

对于图像,这些标题可能包括:

Response Code
Content-Length
Content-Type
或任何其他数量的自定义或典型HTTP头()

如果我正确理解了您的问题,那么您正在将整个响应从操作转换为字节,因此很自然,您还将转换头和请求可能返回的任何其他内容(cookies?)


您试图通过请求的反序列化实现什么?你想测试什么吗?

你的问题不清楚。你在做什么?这个ConvertStringToBytes方法应该做什么?您在控制器中调用它的位置/原因/方式?为什么它接受一个字符串参数并返回一个字节数组?您不能简单地使用
编码.UTF8.GetBytes(输入)
?为什么图像存储为字符串?请提供详细信息。我正在从客户端的类库调用ASP.NET MVC网站的控制器方法(GetImage()),这将返回一个FileStreamResult。FileStreamResult保存存储图像数据的字节数组内存流。我试图从MVC控制器方法调用的响应中获取字节数组。然后,我将该数组转换为一个base 64字符串,然后将其设置为我的ASPX视图中图像标记的源。从映像创建方法的字节[270]开始,然后当我通过您的方法运行从MVC“GetImage()”控制器方法返回的请求字符串时,我以字节[419]结束。嗯,您真的让我想到了为什么这不起作用,无论如何,很好,您找到了其他解决方案,我们开始!谢谢你,奥马尔,这正是我所怀疑的。“管道”正在附加数据。这是我天真的假设,返回的流就是我将要返回的所有流。我只是在我的应用程序中间层使用了第三方图像生成器(条形码),并将这个图像返回给客户端,以便在ASPX页面上进行渲染。也就是说,我没有尝试使用FileStreamResult对象,而是简单地使用一个数据传输对象来保存字节数组。