我尝试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