[英]How do I force users to not skip pages via url input in an asp.net mvc 2 application?
我正在使用ASP.NET MVC 2和VS 2008 Pro。
我正在建立一個網站,用戶必須從第A頁到第B頁到第C頁。換句話說,訂單非常重要。 我想要防止頁面A上的用戶只是輸入頁面C的URL。如果用戶試圖做這樣的事情,我想將它們重定向回他們進入URL之前所在的頁面。
好像我會為此做一個動作過濾器,但老實說我不確定我需要什么樣的。 我需要訪問用戶所在的URL和他們要訪問的URL,並且必須驗證它們。
思考?
編輯1
這很難看,但看起來我可以在OnActionExecuting方法中獲取引用和目標URL的完整Uri。 我敢打賭,這可以通過任何類型的動作過濾器來完成。 我目前正在測試最初設計用於檢查會話狀態到期的自定義操作過濾器的OnActionExecuting事件內的所有內容。
LogUtil.Write("OnActionExecuting", String.Format("Referring Url: {0} \n Destination Url: {1} ",
filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsoluteUri.ToString(),
filterContext.RequestContext.HttpContext.Request.Url.AbsoluteUri.ToString() ));
LogUtil只是我寫的一個寫入日志文件的自定義類。
到目前為止它並不漂亮,但它確實有效。 誰有更優雅的解決方案?
編輯2
另一個使得比較網址更容易的看法如下。 我沒有嘗試使用實際包含參數的路由。 在那種情況下,這可能會被拋棄。
String[] referrerSegments = filterContext.RequestContext.HttpContext.Request.UrlReferrer.Segments;
String[] destinationSegments = filterContext.RequestContext.HttpContext.Request.Url.Segments;
執行操作查找邏輯以確保destinationSegments [destinationSegments.length-1]位於referrerSegments [referrerSegments-1]之后。 這可能是使用靜態字符串List完成的,該列表按順序包含應用程序中所有操作的名稱。 這些的索引值不應超過1(即目標操作應具有引用操作索引值的加或減1的索引)。
思考?
編輯3
嘆。 顯然,當用戶在頁面上並且手動將URL輸入到地址欄中時,引用者信息將丟失。 這對我來說似乎很奇怪,但這意味着我只能獲得此人所在當前頁面的網址。
除了會話,這里有任何建議嗎? 我真的,真的希望盡可能避免在會話中存儲這樣的東西。
Action過濾器正是您所需要的,當它們調皮時具有重定向。 使用會話狀態跟蹤時間流逝的進度。
這使得應用程序的主要部分保持相對無狀態(與傳統ASP.NET相比),並將此邏輯保留在動作過濾器中。
另一個考慮因素:如果您的輸入可能是一個長期存在的過程,您可以將用戶的進度保存到數據庫或Windows Workflow對象中。 只是一個想法。 這將使他們能夠在一台機器上啟動該過程並在其他地方進行拾取。 這可能不適用於您的方案,但在某些情況下值得考慮。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.