我正在为
指定一个长度为833的字符串filterContext.HttpContext.Response.StatusDescription = new String('a',833);
对象并且它失败了并且给了我一个' System.ArgumentOutOfRangeException'异常。
我重写了OnException()方法。
为什么会发生这种情况,因为我认为StatusDescription只是一个普通的字符串?
答案 0 :(得分:4)
不知道原因,但正如您在sourceof.net上看到的那样,可以为HttpResponse.StatusDescription
分配512个字符的限制:
/*
* Http status description string
*/
// Http status description string
// Gets or sets the HTTP status string of output returned to the client.
public String StatusDescription {
get {
if (_statusDescription == null)
_statusDescription = HttpWorkerRequest.GetStatusDescription(_statusCode);
return _statusDescription;
}
set {
if (_headersWritten)
throw new HttpException(SR.GetString(SR.Cannot_set_status_after_headers_sent));
if (value != null && value.Length > 512) // ASURT 124743
throw new ArgumentOutOfRangeException("value");
_statusDescription = value;
_statusSet = true;
}
}
MSDN上也提到过:HttpResponse.StatusDescription Property
<强>例外强>
HttpException
-StatusDescription
在HTTP标头之后设置 已被发送。ArgumentOutOfRangeException
- 所选值有一个 长度大于512。
答案 1 :(得分:1)
虽然http规范没有规定限制,但实施者通常会施加自己的限制,以防止恶意攻击,通过为解析器提供无限制的输入来增加服务器负载。
E.g。 here's a Google Groups thread由于这个原因,基于http的集成工具包的开发人员解释了他的代码中的限制。