2010-06-25 36 views
1

我爲我想保護的圖像創建了一個自定義RouteHandler。我的RouteHandler只需要一個新的路徑(圖形/ {文件名}),並查找真正的文件路徑,設置MIME類型,並提供它。這工作正常。 (http://www.mikesdotnetting.com/Article/126/ASP.NET-MVC-Prevent-Image-Leeching-with-a-Custom-RouteHandler保護ASP.NET MVC中的圖像(帶自定義RouteHandler)

接下來我想做的是在我的自定義處理程序中對會話變量進行檢查,以便確保試圖查看圖像的人員有權這樣做。

基本上,他們會通過一個登錄(輸入一個代碼),它會設置一個會在自定義RouteHandler中尋找的會話變量。

我的問題是,我似乎無法從自定義RouteHandler中獲取會話數據。

最後,我的問題是:如何在控制器中設置數據,並在後續請求中使用自定義RouteHandler中的數據?

回答

1

首先,從傳遞給GetHttpHandler方法的RequestContext,你不能通過requestContext.HttpContext.Session訪問Session嗎?我不確定,我可以看到這在默認情況下不能正常工作,因爲它已經很早了。

如果不是,您可以隨時通過將IRequiresSessionState接口添加到您的處理程序,輕鬆地將會話檢查邏輯移入處理程序。

+0

我該如何使用IRequiresSessionState?我目前的設置是我有一個實現IRouteHandler的類「ImageRouteHandler」,然後我只有一個GetHttpHandler方法,它提供了我的圖像。 – 2010-06-29 00:45:23

+0

@Brian ImageRouteHandler可以進行會話驗證,並返回403未經授權的應用程序隨後捕獲並處理的內容。或者你可以在第一次檢查會話的時候建立一個鏈接的IHttpHandler,然後如果它認爲正確的話執行第二次。 – 2010-06-29 00:58:59

+0

在嘗試從RouteHandler內引用會話變量時,我仍然只是變爲空 – 2010-06-29 01:22:45