簡體   English   中英

頁面事件驗證失敗發生在一種環境中,而在另一種環境中不發生

[英]Page Event Validation failure happens in one environment, but not the other

在我們的網絡應用程序的一組特定步驟下,我收到了一個相當標准的事件驗證錯誤:

Application_Error intercepted exception: Exception of type 'System.Web.HttpUnhandledException' was thrown.
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

真正的難題是,這是在我們的測試環境中發生的,而不是在我嘗試重新創建時在我的開發環境中發生的。 我仔細研究了web.config中可能發生的更改,但是我看不到任何跳出的內容。 環境之間的代碼完全相同-TeamCity對此進行了確認。 因此,我強烈懷疑環境問題,但對於事件驗證之類的方法從何處入手,我一無所知。 通常用代碼處理。

有沒有人想辦法對此進行調查? 我意識到我正在做的事情的細節很稀疏,但這是因為在我們的開發環境中一切都可以100%正常地工作,並且根本沒有問題,所以我不知道什么是有意義的,什么不是。噸。 如果需要更多詳細信息,請詢問,我們將很高興為您提供。

大概您已經檢查了配置文件中的enableEventValidation屬性-默認情況下該屬性不存在。 但是它很可能位於一台或兩台計算機上的machine.config中,從而導致該選項的配置不同。

對於后代,情況就是這樣。

我們有一些下拉列表,這些列表是通過HTTPWebSession緩存中的信息填充的。 大。 在我們的工作流程中,我們還會在某一時刻進行AJAX部分回發,因為我們必須對用戶輸入進行服務器端驗證,而又不會弄亂屏幕上的所有內容。 還是沒問題。

返回此部分回發並嘗試使用一些CSS類鏈接到我們項目中不再存在的圖像時,就會發生問題。 圖像已移動。 這將返回404s。 您仍然會認為這不是問題,只要代碼實際上沒有使用這些圖像即可。 事實並非如此。

問題是,在我們的測試環境中,404是404。它只是返回那,沒什么大不了的。 在生產環境中,我們將404錯誤重定向到我們的登錄頁面,因為這是糟糕的用戶體驗,並且隱式揭示存在和不存在的內容並不好。 這是環境因素。

...由於我們在高度安全的環境中工作,因此登錄頁面將緩存作為其PreRender的一部分進行擦除,因此實際上是否加載頁面圖形都無關緊要。 Ergo,一個AJAX部分回發擦除了緩存,這使會話加載的信息出現在下拉列表中-部分回發不會更新該信息! -不需要輸入。 而且,完全合理地,事件驗證拒絕在整頁提交中接受此輸入。

通過刪除CSS類,解決了這個奇怪而復雜的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM