什么配置控制" HttpBufferlessInputStream.DisableMaxRequestLength"

时间:2016-11-16 21:44:47

标签: c# asp.net

在ASP.NET中工作,我得到了一个api调用,我希望能够在其中传输任意大的有效负载。我遇到了最长请求长度的问题。挖掘一下,我看到这个堆栈:

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布尔值?

我查看了提供这些请求的应用程序池中的web.config,但我没有看到任何与"请求相关的设置"或"长度"似乎在起作用。

我还能在哪儿看?还有哪些其他信息可以回答这个问题?

1 个答案:

答案 0 :(得分:1)

如果您在referencesource.microsoft.com上搜索,则可以点击来源中的方法名称,所有来电都将显示在左侧列表中。从那里你可以向后浏览,看看它是如何被调用的。当我想了解源代码时,我经常使用这种方法。 Github源代码也很棒,但只需单击其名称即可导航方法,类甚至变量,这是首屈一指的。

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

从三个地方调用它,其中一个显式地将参数传递为truetraces to here,其中有几行关于Request.ReadEntityBodyMode和缓冲/无缓冲/经典模式的注释。它也通过了HttpRequestWrapper

的抽象