2009-08-24 9 views
5

これはIIS 6の世界でASP.NET 2.0を使用しています。POSTを再実行せずにPOST値の値を変更することはできますか?

POST経由でデータを送信するフォームを送信するユーザーがいます。データを受け取るページは、いくつかの簡単な検証を行います。検証に合格すると、基本的にRequest.Form( "NameHere")を使用してデータを読み取るブラックボックスのコードルーチンが実行されます。

私はPOSTアイテムの値を変更してPOSTに戻すことができます。 Request.Form( "NameHere")を読み取るコードを変更する機能はありません。私の考え方は、ページのロードイベント中にデータを変更することです。 POSTアイテムの値を変更すると、ブラックボックスコードを変更する必要はありません。

HTTP POSTでアイテムの値を変更することはできますか?

これを行った人はいますか?

ありがとうございます!

+0

答えとして1つを設定していないと申し訳ありません。私のプロジェクトは変わりました。私は提示されたソリューションを検証する時間がありません。私だけでなく、この質問を検索して答えを見つける未来の人々を助ける時間をとってくれて本当に感謝しています。 – MADCookie

答えて

12

ちょっとハッキリですが、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[] { }); 
} 

私のマシン上でコードをテストしたところうまくいきました。しかし、パフォーマンスや移植性の保証はできません。

+0

私はそれがスーパーハッキーなので、フォームデータを変更することはお勧めしません:)しかし、これは知っている良いテクニックであり、どこでも使用できます。 – user961954

+0

これは私のベーコンを保存しました - 私はQueryStringとして入力を含む有効なHttpResposneを期待しているメソッドの新しいフロントエンドを配置するためにQueryStringに挿入する必要がありました。 –

1

元のPOST宛先を自分のアドレスに変更する唯一の方法として参照してください。その後、自分のアドレスに移動するすべての要求がブラックボックスのアドレスにディスパッチされます。

これにはいくつかのオーバーヘッドがあります。

私が覚えている限り、フォームコレクションは変更できません。正確な構造を覚えていないが、私はそうだと思う。

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

は動作しません。

よろしく

2

現在のPOSTは、しかし、あなたは新しいPOSTリクエストを作成し、それにリダイレクトすることができ、変更することはできません。

関連する問題