2012-04-30 106 views
0

可能重複:
Get query string values in JavaScriptASP.NET頁面方法 - 如何獲取頁面方法內的url參數值?

我有一個日曆網頁。當用戶打開事件時,它會打開帶有如下網址的頁面:「http://localhost/Event.aspx?eventid=4」 然後,我使用jQuery調用頁面方法來顯示一些額外的數據。我通過$ .ajax函數發送的數據參數還包括「eventID」(用於顯示正確事件的數據)。 如果用戶手動(假設通過螢火蟲控制檯)執行jQuery調用僞造「eventID」的頁面方法,他會得到錯誤的數據。 我想阻止,...以一種不發送jQuery數據參數的eventid的方式,但以某種方式獲得服務器端代碼隱藏的eventid。 事情是,我不能使用會話(因爲用戶可以打開多個事件,每個人都有它自己的eventID),我也不能使用cookie,因爲他們也可以被黑客攻擊。 所以我想直接拿到第方法中正確的事件ID,用

HttpContext.Current.Request.QueryString 

,但沒有運氣。 在Page_Load中,我得到我的事件ID:

EventID = Page.Request.QueryString("eventid") 

,但我不能找到一個辦法讓這個事件ID值到我的網頁的方法。

所以,我要求的是如何從Page_Load中定義的url或public變量中獲取頁面方法參數值的建議。

感謝。

編輯: 目前我使用POST發送參數,如:

var myEventId = $("#hiddenField").val(); 

$.ajax({ 
url: "Event.aspx/getEventData", 
type: "POST", 
data: "{'eventid':myEventId}" 
... 
}); 

但我想,以避免發送事件ID參數與POST,防止黑客入侵。

+0

如何使用POST而不是得到什麼?在這種情況下,你可以在頁面上有一個隱藏字段,可以發佈到服務器來調用你的方法... – Sunny

+0

這個問題可能會幫助你:http://stackoverflow.com/questions/901115/get-query-string僅供參考 –

+0

僅供參考,POST請求對於惡意用戶來說比GET請求更安全,反之亦然。 – Jeff

回答

0

這裏的根本問題似乎與本身矛盾。

你說你需要從用戶那裏獲取eventId,但你實際上並不想從用戶那裏得到任何東西,因爲他們可以破解/改變它。

底線是你不應該相信用戶的任何輸入,句點。如果用戶有權讀取事件「foo」,而不是事件「bar」,那麼您需要在服務器端進行驗證。

你不能真的做任何事情來阻止他們向你發送「酒吧」,但你可以拒絕他們在發送之後查看「酒吧」。

至於什麼是你的代碼錯誤,數據參數需要JSON本身,而​​不是JSON的字符串(刪除你的引號):

$.ajax({ 
url: "Event.aspx/getEventData", 
type: "POST", 
data: { eventid : myEventId} 
... 
});