2016-11-16 20 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