当前位置:  开发笔记 > 编程语言 > 正文

我可以修改Request.Form变量吗?

如何解决《我可以修改Request.Form变量吗?》经验,为你挑选了1个好方法。

我尝试Request.Form.Set(k, v)但它抛出异常

集合是只读的

annakata.. 13

这与修改完全相同Request.Querystring.两者都是内部复杂的私人财产和可能被视为错误的东西,但是我知道有两种可能的解决方案(我将忽略响应.直接计划失控 - 这太可怕了).

方法一是使用反射直接修改集合:

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请求.

编辑:Marc Gravell为计划B提供了更为雄辩的理由



1> annakata..:

这与修改完全相同Request.Querystring.两者都是内部复杂的私人财产和可能被视为错误的东西,但是我知道有两种可能的解决方案(我将忽略响应.直接计划失控 - 这太可怕了).

方法一是使用反射直接修改集合:

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请求.

编辑:Marc Gravell为计划B提供了更为雄辩的理由

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有