我正在爲從Request.InputStream中讀取POST正文的WebApi控制器編寫單元測試。我需要設置HttpContext.Current.Request.InputStream的inputstream屬性,或者設置輸入流的內容。這裏是我的單元測試代碼,到目前爲止,但它不斷拋出異常:如何使用反射設置HttpRequest.InputStream值
var originalStream = HttpContext.Current.Request.InputStream;
Stream newStream = new MemoryStream(ASCIIEncoding.Default.GetBytes("Test String"));
var propInfo = originalStream.GetType().GetProperty("CanWrite");
propInfo.SetValue(originalStream, true);
newStream.CopyTo(originalStream);
propInfo.SetValue(originalStream, false);
我上線的SetValue以下情況除外:
ArgumentException: Property set method not found
我要對所有這一切錯了嗎?我的控制器讀取輸入流並將其反序列化爲JSON,因此我需要能夠將數據插入到該流中。我只是不知道該怎麼做。非常感謝。
我正在測試我的控制器的操作。爲了得到請求主體,我的控制器執行Context.Current.Request.InputStream.Read(基本上),所以我需要能夠設置它。我無法將身體傳遞給我的行動。我不明白你的方法會如何工作。 – dmoss18
雖然這是我的觀點。我會把邏輯轉移到它自己的類中。將其注入到控制器中,然後使用它來測試操作。您可以將'InputStream'傳遞到這個單獨的類中,並將其包裝在更具體的實現中。你所做的比自己需要的要難得多。我會更新我的答案。 –
謝謝,但我如何讓InputStream讀取我在測試方法中定義的內容?我看到你的方法如何工作,但我不明白如何告訴InputStream讀什麼。 – dmoss18