我正在寻找这些问题的答案:
- 对于任何给定的请求,这三个属性是否总是返回相同的值?
- 它们中的任何一个都有副作用吗?
- 在 IIS 收到整个请求之前,它们中的任何一个都会阻塞吗?
- 它们中的任何一个会导致上传的文件完全加载到内存中吗?
我之所以关心这一点,是因为当请求在服务器上处理时间过长时,我会向我发送电子邮件,并且我希望避免为大型请求发送此电子邮件,即当用户上传一个或多个大文件时。
我正在寻找这些问题的答案:
我之所以关心这一点,是因为当请求在服务器上处理时间过长时,我会向我发送电子邮件,并且我希望避免为大型请求发送此电子邮件,即当用户上传一个或多个大文件时。
根据 MSDN:
ContentLength - 指定客户端发送的内容的长度(以字节为单位)。
TotalBytes - 当前输入流中的字节数。
InputStream.Length - 输入流中的字节长度。
所以最后两个是一样的。以下是 Reflector 关于 ContentLength 属性的说明:
public int ContentLength
{
get
{
if ((this._contentLength == -1) && (this._wr != null))
{
string knownRequestHeader = this._wr.GetKnownRequestHeader(11);
if (knownRequestHeader != null)
{
try
{
this._contentLength = int.Parse(knownRequestHeader, CultureInfo.InvariantCulture);
}
catch
{
}
}
else if (this._wr.IsEntireEntityBodyIsPreloaded())
{
byte[] preloadedEntityBody = this._wr.GetPreloadedEntityBody();
if (preloadedEntityBody != null)
{
this._contentLength = preloadedEntityBody.Length;
}
}
}
if (this._contentLength < 0)
{
return 0;
}
return this._contentLength;
}
}