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

我有一个用户提交的表格,该表格通过邮政发送数据。接收数据的页面可以进行一些简单的验证。如果验证通过,则运行一个黑色框代码例程,该例程基本上使用request.form.form(“ nankhere”)读取数据。

我希望能够更改帖子项目的价值,然后将其放回帖子中。我没有能力修改读取请求的代码。form.form(“ nankhere”),因此我围绕的想法是在页面加载事件期间修改数据。如果我更改帖子项目的值,则不必修改黑框代码。

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

有人这样做了吗?

谢谢!

有帮助吗?

解决方案

即使有点骇客,也有一种方法可以更改帖子变量的值。

我们可以使用反射来标记 Request.Form 收集非读书,将价值更改为我们想要的东西,然后再次将其标记为Roadonly(以便其他人无法更改价值)。使用以下功能:

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[] { });
}

我已经在计算机上测试了代码,并且可以正常工作。但是,我不能提供任何性能或便携性保证。

其他提示

当前的帖子无法更改,但是,您可以创建一个新的帖子请求并重定向到该请求。

我认为是将原始的末期后遗产更改为您自己的唯一方法,然后在您的代码中,所有转到您的地址的请求都派遣到黑框地址。

不过,这有一些开销。

据我记得,表单收集是无法解缩的,对吗?不记得确切的结构,但我认为

Request.Form("NameHere") = "newValue"

不会工作。

问候

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top