我想要一个可以访问整个请求的单例,并且只能从该请求中调用。
我的客户端要求不使用内置服务器端会话。 相反,我需要每次根据请求的cookie和查询字符串重建UserSession对象,并使用数据库对其进行验证。 构建UserSession对象有一些开销,所以我希望每个请求尽可能早地执行一次,然后在整个请求中引用该对象。
目前我正在使用OWIN中间件来调用实际构建它的facade对象,然后我将结果粘贴到用[ThreadStatic]修饰的类的静态字段中。然后,我在控制器上使用自定义Authorize属性来检查该单例以确保它是有效的。
首先,这对多个请求是否安全?换句话说,使用[ThreadStatic]确保每个请求静态对象永远不会被另一个HTTP请求访问,即使是在同一个浏览器会话中也是如此。
第二次,我是否会遇到使用TPL或其他异步编程方法的问题,因为单个实例应该是可用的,因为它是相同的请求,但它不是因为它可能正在执行一个不同的线程。
最后,我做错了吗?对于这个问题,有没有比我正在做的更好或更安全的解决方案。
答案 0 :(得分:2)
HttpContext.Current.Items
。这种情况似乎存在一个简单的每请求集合。