为什么为filtercontext.httpcontext.response.statusdescription分配一个long值的字符串会导致错误?

时间:2015-12-08 02:37:25

标签: c# .net model-view-controller

我正在为

指定一个长度为833的字符串
filterContext.HttpContext.Response.StatusDescription = new String('a',833);

对象并且它失败了并且给了我一个' System.ArgumentOutOfRangeException'异常。

我重写了OnException()方法。

为什么会发生这种情况,因为我认为StatusDescription只是一个普通的字符串?

2 个答案:

答案 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的集成工具包的开发人员解释了他的代码中的限制。