2010-06-25 34 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