【问题标题】:Get Response.output size? [closed]获取 Response.output 大小? [关闭]
【发布时间】:2011-12-05 12:59:03
【问题描述】:

我的代码现在是这样的:

var xmlSerializer = new XmlSerializer(typeof(DataSet));
xmlSerializer.Serialize(Response.Output, ds);

之后我想显示尺寸,但这给了我一个错误:

Response.AddHeader("Content-Length", Response.OutputStream.Length.ToString());

错误是

NotSupportedException was unhandled by user code

【问题讨论】:

  • 底层流不支持Length。您对此无能为力。
  • @Oded 我知道它不支持长度,这就是为什么我要问如何获得 Response.Ouput 对象的大小。您的回复没有增加任何价值。

标签: asp.net


【解决方案1】:

Response.OutputStream 不支持Length 属性;你不能得到长度。一个问题是,Stream 的寿命可能比Response 长,如果通常情况下启用Keep-Alive。这就是为什么您根本无法获得Length...但是...

还请注意,这里的 Stream 不仅发送内容 - 它还发送标头。这使得使用您希望使用它的方式完全不合适(因为您生成的 Content-Length 标头将不正确。)因此,即使您可以获得 Length,它也不是您想要的。

无论如何,这又不可能了:您尝试设置的标头是 的一部分,Stream.... 看到问题了吗?

不过,FosterZ 为您提供了一条不同的途径来尝试解决这个问题;你需要得到你真正想要测量的长度——而不是流的长度。

【讨论】:

  • 那么生成文件的长度就没有办法传递了吗?
  • 你需要传递文件的长度。那不是你在做什么。您正在写入文件的Stream 与文件本身不同。获取要传递给该代码的文件本身的长度。
【解决方案2】:

我在做这个之前很长时间我的代码是这样的,你可能会得到一些想法或提示:

string output = encoding.GetString(memoryStream.ToArray());
memoryStream  = new MemoryStream(output.Length);

byte[] buffer = encoding.GetBytes(output);
//buffer.Length(); is this the length you want ?

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2013-05-01
    • 1970-01-01
    • 2013-07-06
    • 2015-02-06
    • 2020-05-19
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多