2016-11-16 72 views
2

在ASP.NET中工作,我有一个api调用,我希望能够流化任意大的有效负载。我遇到了最大请求长度的问题。在挖掘一下,我看到这个堆栈:什么配置控件“HttpBufferlessInputStream.DisableMaxRequestLength”

at System.Web.HttpBufferlessInputStream.ValidateRequestEntityLength() 
at System.Web.HttpBufferlessInputStream.EndRead(IAsyncResult asyncResult) 
at System.Net.Http.StreamToStreamCopy.StartRead() 

望着the source for ValidateRequestEntityLength显示下面的代码:

private void ValidateRequestEntityLength() { 
    if (!_disableMaxRequestLength && Length > _maxRequestLength) { 
     if (!(_context.WorkerRequest is IIS7WorkerRequest)) { 
      _context.Response.CloseConnectionAfterError(); 
     } 
     throw new HttpException(SR.GetString(SR.Max_request_length_exceeded), null, WebEventCodes.RuntimeErrorPostTooLarge); 
    } 
} 

其中_disableMaxRequestLength是传递到构造该类一个布尔值。我没有看到这个课程正在堆栈中的任何地方构建,所以我想知道:

  • 一般情况下,如何从这里继续向后工作以了解如何配置?
  • 具体而言,什么配置控制这个disableMaxRequestLength boolean?

我看过的应用程序池web.config服务这些请求,我没有看到有关“请求”或“长度”,似乎是在游戏的任何设置。

我在哪里看?还有哪些其他信息与回答这个问题有关?

回答

1

如果您搜索的是referencesource.microsoft.com,则可以单击源中的方法名称,所有电话将显示在左侧的列表中。从那里你可以浏览,倒退,看看它是如何调用的。当我想了解源代码时,我使用这种方法很多。 Github的源代码也很棒,但只需点击它们的名字就可以浏览方法,类甚至变量,这是首屈一指的。

更具体地说,它是一个可选参数,可以看到here,默认为false

它被从三个地方调用,其中一个明确地传递参数truetraces to here,其中有几行关于Request.ReadEntityBodyMode和缓冲/无缓冲/经典模式的评论。它也通过了抽象的HttpRequestWrapper