2009-07-23 43 views
23

有什麼方法可以指定給定的控制器或操作以只讀方式使用會話狀態嗎?在「舊的」ASP.NET中,我們曾經這樣做過:指定ASP.NET MVC中的只讀會話

<%@ Page EnableSessionState="ReadOnly" %> 

是否存在ASP.NET MVC等效項?我希望允許我的應用程序同時處理來自同一客戶端的多個請求,並且完全關閉會話在我的情況中不是一個選項。

+0

可能重複的[禁用會話狀態每個請求在ASP.Net MVC(http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam 2013-12-12 11:48:59

回答

8

類似的問題在這裏問:Disable Session state per-request in ASP.Net MVC

接受的答案涉及創建自定義的路由處理,最終跳過綁定到會話。這並不完全回答你的問題(這是如何聲明多個操作來使用只讀會話訪問),但它似乎足以提及。

1

這可能有點棘手 - 我的理解是設置會話狀態是發生在IHttpHandler級別的事情。通過自定義處理程序,您可以使用標記接口來指定會話狀態,如IReadOnlySessionState聲明它只需要只讀會話狀態。您可以嘗試將其附加到您的控制器並查看它是如何飛行的。我懷疑它不會因爲ASP.NET mvc控制器在IHttpHandler連線後發生,但它值得一試。

另一種解決方案可能是將會話狀態變量包裝在您自己的類中,並公開一個只讀版本以強制只讀。在多個請求中訪問它不應該是一個問題,但是如果您開始嘗試從多個角度寫入相同的會話變量,則可以獲得競爭條件等。

+0

目標不是讓變量只讀,目標是允許來自單個客戶端的多個同時請求MVC頁面。將會話變量包裝在只讀包裝器中將無濟於事。 – Mark 2009-07-27 16:57:46

+0

我想我並不完全關注你 - 那麼爲什麼ReadOnly很重要,如果不是爲了避免競爭條件的時候可以同時更新?如果你的所有頁面只是讀會話數據,那麼同時發送請求不會受到影響。如果您的所有頁面都需要同時更新會話,那麼將內容封裝爲ReadOnly不會起作用。 – 2009-07-27 17:50:19

-2

如何在您的模型中將您想要成爲「只讀」的數據設置爲靜態?通過這種方式,您可以同時向MVC請求相同的數據。