Asp.net 我可以在不重新过帐的情况下更改过帐价值吗?

Asp.net 我可以在不重新过帐的情况下更改过帐价值吗?,asp.net,httprequest,Asp.net,Httprequest,这是在IIS 6世界中使用ASP.NET 2.0 我有一个用户提交了一个表单,通过POST发送数据。接收数据的页面执行一些简单的验证。如果验证通过,则运行一个黑盒代码例程,该例程基本上使用Request.Form(“NameHere”)读取数据 我希望能够更改POST项的值,然后将其放回POST。我没有能力修改读取Request.Form(“NameHere”)的代码,所以我的工作思路是在页面的加载事件期间修改数据。如果我更改了POST项的值,则不必修改黑盒代码 是否可以更改HTTP POST上

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

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

我希望能够更改POST项的值,然后将其放回POST。我没有能力修改读取Request.Form(“NameHere”)的代码,所以我的工作思路是在页面的加载事件期间修改数据。如果我更改了POST项的值,则不必修改黑盒代码

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

有人这样做过吗


谢谢

我认为这是将原始邮件目的地更改为您自己的目的地的唯一方法,然后在您的代码中,所有发送到您地址的请求都被发送到黑盒地址

不过,这会带来一些开销

据我所知,表单集合是不可修改的,对吗?我不记得确切的结构,但我认为

Request.Form("NameHere") = "newValue"
这是行不通的


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

尽管有点不太成熟,但有一种方法可以更改POST变量的值

我们可以使用反射将
请求。表单
集合标记为非只读,将值更改为我们想要的值,然后再次将其标记为只读(以便其他人无法更改值)。使用以下功能:

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

我已经在我的机器上测试了代码,效果很好。但是,我不能提供任何性能或可移植性保证

对不起,大家没有设置一个作为答案。我的项目发生了变化,我没有时间验证提出的解决方案。我真的很感谢您花时间不仅帮助我,而且帮助未来搜索并找到此问题答案的人。我不建议更改表单数据,因为它非常粗糙:),但是+1,因为这是一个很好的技巧,可以在其他地方使用。这节省了我的时间-我需要插入到QueryString中,以放置一个方法的新前端,该方法需要一个有效的httprespone,其中包含作为QueryString的输入。