2009-08-24 72 views
5

這是在IIS 6世界中使用ASP.NET 2.0。我可以在不重新發布的情況下更改POST值的值嗎?

我有一個用戶提交表單,通過POST發送數據。接收數據的頁面進行一些簡單的驗證。如果驗證通過,那麼運行一個黑盒代碼例程,基本上使用Request.Form(「NameHere」)讀取數據。

我希望能夠更改POST項目的值,然後將其放回POST。我沒有修改讀取Request.Form(「NameHere」)的代碼的能力,所以我的想法是在頁面加載事件期間修改數據。如果我更改POST項目的值,那麼黑盒代碼不必修改。

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

有沒有人這樣做?

謝謝!

+0

對不起,沒有人設置一個答案。我的項目發生了變化,我無法承擔驗證所提供解決方案的時間。我真誠地感謝您花時間幫助我,而不是幫助未來尋找答案的人。 – MADCookie 2009-08-26 15:17:41

回答

12

儘管它有點不方便,但有一種方法可以更改POST變量的值。

我們可以使用Reflection將Request.Form集合標記爲非只讀,將值更改爲我們想要的值並將其重新標記爲readonly(以便其他人無法更改值)。使用以下功能:

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

我不會建議改變表單數據,因爲它超級哈克:),但+1,因爲這是一個很好的技術知道,可以用在別的地方。 – user961954 2014-02-19 19:05:38

+0

這已經保存了我的培根 - 我需要插入到QueryString中,以將希望包含輸入的有效HttpResposne作爲QueryString的方法的新前端。 – 2015-01-12 16:22:48

1

我認爲這是將原始POST目標更改爲您自己的POST目標的唯一方法,然後在您的代碼中將所有發送到您地址的請求分派到黑盒地址。

雖然有一些開銷。

據我所知,表單集合是不可修改的,對嗎?不記得確切的結構,但我認爲

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

是不會工作。

問候

2

目前的POST不能改變,但是,你可以創建一個新的POST請求,並重定向到。

相關問題