質問
これは、IIS 6の世界でASP.NET 2.0を使用しています。
ユーザーにフォームを送信して、データを投稿して送信します。データを受信するページは、いくつかの簡単な検証を行います。検証が合格した場合、request.form( "namehere")を使用して基本的にデータを読み取るブラックボックスコードルーチンが実行されます。
投稿アイテムの値を変更してから、投稿に戻すことができます。 request.form( "namehere")を読み取るコードを変更する機能はないため、ページのロードイベント中にデータを変更することです。投稿アイテムの値を変更した場合、ブラックボックスコードを変更する必要はありません。
HTTP投稿のアイテムの値を変更することは可能ですか?
誰かがこれをしましたか?
ありがとう!
解決
少しハッキーですが、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[] { });
}
マシンでコードをテストしましたが、正常に動作します。ただし、パフォーマンスや移植性の保証を提供することはできません。
他のヒント
現在の投稿を変更することはできませんが、新しいPOSTリクエストを作成してそれにリダイレクトすることができます。
元の予定を自分のものに変更する唯一の方法と考えています。そして、あなたのコードでは、アドレスに送られるすべてのリクエストがブラックボックスアドレスに派遣されます。
しかし、これにはいくつかのオーバーヘッドがあります。
私が覚えている限り、フォームコレクションは変更できませんよね?正確な構造を覚えていないが、私はそう思う
Request.Form("NameHere") = "newValue"
うまくいきません。
よろしく