C# Request.InputStream 讀取輸入流為空的原因處理
阿新 • • 發佈:2021-01-20
轉載C# Request.InputStream 讀取輸入流為空的原因處理
今天在手機App測試介面的時候發現一個通過POST方式的介面 獲取body中的引數一直為空,但是在資料量小的時候卻可以獲取到資料,開始懷疑是不是POST的長度有限制,然後在web.config中修改了一下maxRequestLength,如下
1 2 3 |
<system.web>
<httpRuntime targetFramework= "4.5" maxRequestLength= "20480" />
</system.web>
|
然後發現 獲取的值還是為空,然後在除錯的過程中發現當資料量多的時候Request.InputStream的Position居然是在結束位置,如下圖
從上圖可以看出,因為Request.InputStream肯定是被讀過了所以Position會在結束位置,一般Positon都是0。所以獲取body中的引數一直為空,知道原因後在讀取流之前把Position設定為0就可以了
1 2 3 4 5 6 7 8 |
var stream = HttpContext.Current.Request.InputStream;
stream.Position = 0;
using ( var streamReader = new StreamReader(stream, Encoding.UTF8))
{
requestData = streamReader.ReadToEndAsync().Result;
requestData = ( "appKey" + appKey + requestData + "timestamp" + timestamp).ToUpper();
stream.Position = 0;
}
|
但為什麼Request.InputStream的Length的值在大概在1960左右的時候Position會在結束位置,還不知道原因,希望有大俠指教!