【问题标题】:Can I change the value of a POST value without re-POSTing?我可以在不重新发布的情况下更改 POST 值的值吗?
【发布时间】:2009-08-24 15:41:51
【问题描述】:

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

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

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

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

有人做过吗?

谢谢!

【问题讨论】:

  • 对不起大家没有设置一个作为答案。我的项目发生了变化,我没有时间验证提出的解决方案。非常感谢您抽出时间帮助我,以及未来搜索并找到这个问题的人的答案。

标签: asp.net httprequest


【解决方案1】:

虽然有点笨拙,但有一种方法可以更改 POST 变量的值。

我们可以使用反射将Request.Form集合标记为非只读,将值更改为我们想要的值并再次将其标记为只读(这样其他人就无法更改值)。使用以下函数:

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

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

【讨论】:

  • 我不建议更改表单数据,因为它超级 hacky :),但是 +1 因为这是一种很好的技术,可以在其他地方使用。
  • 这保存了我的培根 - 我需要插入 QueryString 以放置一个新的方法前端,该方法期望包含作为 QueryString 的输入的有效 HttpResposne。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我认为这是将原始 POST-destination 更改为您自己的唯一方法,然后在您的代码中,所有发往您地址的请求都被分派到黑盒地址。

    虽然这有一些开销。

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

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

    不会工作。

    问候

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2023-02-03
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多