在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
,但我没有看到任何与"请求相关的设置"或"长度"似乎在起作用。
我还能在哪儿看?还有哪些其他信息可以回答这个问题?
答案 0 :(得分:1)
如果您在referencesource.microsoft.com上搜索,则可以点击来源中的方法名称,所有来电都将显示在左侧列表中。从那里你可以向后浏览,看看它是如何被调用的。当我想了解源代码时,我经常使用这种方法。 Github源代码也很棒,但只需单击其名称即可导航方法,类甚至变量,这是首屈一指的。
更具体地说,它是一个可选参数,可以看作here,默认为false
。
从三个地方调用它,其中一个显式地将参数传递为true
和traces to here,其中有几行关于Request.ReadEntityBodyMode
和缓冲/无缓冲/经典模式的注释。它也通过了HttpRequestWrapper