1.什么是WebAPI,詳見:http://www.cxyclub.cn/n/25123/
2.一般情況下我們不需要去關心客戶端的請求數據,WebAPI會通過自己的方式去將客戶端請求的數據轉換為實體對象,我們在接口里面定義實體就可以接收數據,但是公司要求必須要記錄客戶端的請求數據到日志中,於是我們就創建了一個攔截器來處理。
攔截器需要繼承ActionFilterAttribute並重寫方法OnActionExecuting(HttpActionContext actionContext),然后在方法里面通過如下代碼記錄客戶端數據:
var request = HttpContext.Current.Request; byte[] byts = new byte[request.InputStream.Length]; request.InputStream.Read(byts, 0, byts.Length); string pa = Encoding.Default.GetString(byts);
奇跡出現了,你會發現你永遠都無法獲得數據,pa的值永遠為空,怎么辦呢?查看多方面資料后發現,C#中的流數據讀取一次之后下標就到了最后,我們再次讀取時必須要將位置設置為0,代碼如下:
var request = HttpContext.Current.Request; request.InputStream.Position = 0;//核心代碼 byte[] byts = new byte[request.InputStream.Length]; request.InputStream.Read(byts, 0, byts.Length); string pa = Encoding.Default.GetString(byts);
記錄一下,以后遇到也好解決。