我嘗試Request.Form.Set(k,v)但它拋出異常集合是隻讀的C#我可以修改Request.Form的變量嗎?
11
A
回答
12
這是完全一樣的修改的Request.QueryString。這兩者在內部都被私有財產所複雜化,可能被認爲是一個錯誤,但是我知道有兩種可能的解決方案(我會忽略掉response.redirect計劃 - 這太可怕了)。
方法之一是使用反射來直接修改集合:
NameValueCollection oQuery = Request.QueryString;
oQuery = (NameValueCollection)Request.GetType().GetField("_queryString",BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
PropertyInfo oReadable = oQuery .GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
oReadable.SetValue(oQuery, false, null);
oQuery["foo"] = "bar";
oReadable.SetValue(oQuery, true, null);
B計劃,我認爲借自己更好的單元測試是爲了避免與收集直接打交道,而是把它作爲一個的NameValueCollection到任何你想要處理的方法,從你的任何需要的淺拷貝。我自己用它來模擬Web請求。
編輯:馬克Gravell給了B計劃
2
表單是表示客戶端在請求中發送的內容。你想要做什麼?就我個人而言,我會嘗試將「讀取表單」代碼與「用值執行某些操作」代碼分開 - 這樣,您可以儘早進行任何預處理(從表單讀取時),以及以後代碼需要知道什麼是實際上是發送 - 它只需要給它的值(即它不會直接與請求對話)。
如果還意味着您可以測試您的邏輯,而不需要表單,甚至不需要http請求。
其實,ASP.NET MVC會爲你做了很多這方面(上段)...
請注意,您可以更新.Items收集 - 但這是比較模糊一點(即它並不特別涉及表格)。
(歡呼順便說一句固定錯字)
相關問題
- 1. 我可以使用Lua修改內置的Nginx變量嗎?
- 2. 我可以修改「引用」整數變量嗎?
- 3. 我可以從Jekyll內部修改全局Liquid變量嗎?
- 4. 我可以使用變量修改NetLogo命令嗎?
- 5. 我可以修改一個const成員變量嗎?
- 6. 可修改的全局變量C++
- 7. 我可以修改settings.py中的static_url嗎?
- 8. 我們可以使用const_cast來修改一個常量變量嗎?
- 9. Can Gulp可以改變LESS變量嗎?
- 10. 是否可以修改$ _SESSION變量?
- 11. 我可以修改或擴展ChartJS嗎?
- 12. 我可以修改RoR CRUD行爲嗎?
- 13. 可以在枚舉聲明中修改實例變量嗎?
- 14. 可以修改Vala函數參數變量嗎?
- 15. 我可以在迭代時修改C++容器的值嗎?
- 16. 可以修改jQuery庫嗎?
- 17. 可以修改rt.jar嗎?
- 18. 可以修改TWTweetComposeViewController嗎?
- 19. 我可以批量分配變量嗎?
- 20. 我的CurrentThreadID可以改變嗎?
- 21. ob_end_clean修改變量以及
- 22. 我可以在C#中修改一個Word '97文檔嗎?
- 23. catalina.bat可以更改環境變量嗎?
- 24. 我可以使用PHP中的其他變量修改字符串中的變量嗎?
- 25. const函數可以在C++中遞歸,只要它修改可變變量?
- 26. 你可以在C++的類中有變量的變量嗎?
- 27. 我們可以更改可變類的最終變量的值嗎?
- 28. sprintf()修改函數中的變量嗎?
- 29. 我可以在Java中更改變量的聲明類型嗎?
- 30. 我可以安全地更改SharedPreferences變量的類型嗎?
更雄辯的理由以這種方式操縱私人的東西絕不是一個建議的事情,應該儘量避免儘可能多地(〜=不惜一切代價)。畢竟他們是有原因的私人的。你會依賴一個特定版本的庫。底層實現的任何更改都可能會破壞您的應用程序。 – 2008-11-30 18:13:23