我可以在不重新发布的情况下更改POST值的值吗?

MAD*_*kie 5 asp.net httprequest

这是在IIS 6世界中使用ASP.NET 2.0.

我有一个用户提交一个表单,通过POST发送数据.接收数据的页面进行了一些简单的验证.如果验证通过,则运行黑盒代码例程,基本上使用Request.Form("NameHere")读取数据.

我希望能够更改POST项的值,然后将其重新放回POST.我没有能力修改读取Request.Form("NameHere")的代码,因此我的想法是在页面的加载事件期间修改数据.如果我更改POST项的值,则不必修改黑盒代码.

是否可以更改HTTP POST上项目的值?

有没有人这样做过?

谢谢!

par*_*cle 12

虽然它有点hacky,但有一种方法可以改变POST变量的值.

我们可以使用Reflection将Request.Form集合标记为非readonly,将值更改为我们想要的值并再次将其标记为readonly(以便其他人无法更改值).使用以下功能:

protected void SetFormValue(string key, string value)
{
  var collection = HttpContext.Current.Request.Form;

  // Get the "IsReadOnly" protected instance property.
  var propInfo = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

  // Mark the collection as NOT "IsReadOnly"
  propInfo.SetValue(collection, false, new object[] { });

  // Change the value of the key.
  collection[key] = value;

  // Mark the collection back as "IsReadOnly"     
  propInfo.SetValue(collection, true, new object[] { });
}
Run Code Online (Sandbox Code Playgroud)

我已在我的机器上测试了代码并且工作正常.但是,我无法提供任何性能或可移植性保证.