我有一個RequestLog功能與應用程序邏輯完全分離。ServiceStack - OnEndRequest捕獲響應主體
我在預先請求過濾器中捕獲請求/響應。爲了實現這一點,我實例化了一個保持請求上下文的請求範圍對象。在所有事情都被處理之前(在AppHost的OnEndRequest處理程序中),我寫入數據庫。每個http請求一行。
我能夠訪問響應碼,路徑,該方法中,要求體,請求報頭等
然而,由於它已經被設置在響應流是不可用的。這背後的邏輯是什麼?是這樣的嗎,IIS將流內容寫入導線,並立即釋放資源?有什麼方法可以捕獲OnEndRequest處理程序中的Response主體?
感謝
是的,我知道。實際上,這就是我在預先請求過濾器中抓取所有內容的原因,並將它們轉儲到數據庫的「OnEndRequest」。我想要一個發佈請求過濾器的錯覺。這個想法是有一個請求記錄器,其中包含所有進入sshttphandlerfactory的請求。由於「短循環」,標準RequestLogsFeature無法實現這種行爲。這種情況是否有任何特殊原因沒有考慮? –
沉思?短路是一項功能,響應總是按預期直接寫入響應流。查看請求管道中的第一個條目以獲得每個請求的通知,即註冊一個RawHttpHandler,您希望返回null以便不劫持請求。 – mythz
我只是試圖讓你看到這種記錄器/功能的重要性。也許你有理由認爲它不相關,因爲它在ServiceStack中沒有強烈的預期(RequestLogFeature是一個servicerunner的東西)。但我想答案是使用HttpRawHandler。我假設我仍然不能訪問原始輸出主體,這正是我的意圖。這樣,它將與寫入響應的任何其他功能分離並關閉請求。 –