今天在手機App測試介面的時候發現一個通過POST方式的介面 獲取body中的參數一直為空,但是在數據量小的時候卻可以獲取到數據,開始懷疑是不是POST的長度有限制,然後在web.config中修改了一下maxRequestLength,如下 然後發現 獲取的值還是為空,然後在調試的過程中發現當數據 ...
今天在手機App測試介面的時候發現一個通過POST方式的介面 獲取body中的參數一直為空,但是在數據量小的時候卻可以獲取到數據,開始懷疑是不是POST的長度有限制,然後在web.config中修改了一下maxRequestLength,如下
<system.web> <httpRuntime targetFramework="4.5" maxRequestLength="20480" /> </system.web>
然後發現 獲取的值還是為空,然後在調試的過程中發現當數據量多的時候Request.InputStream的Position居然是在結束位置,如下圖
從上圖可以看出,因為Request.InputStream肯定是被讀過了所以Position會在結束位置,一般Positon都是0。所以獲取body中的參數一直為空,知道原因後在讀取流之前把Position設置為0就可以了
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會在結束位置,還不知道原因,希望有大俠指教!