【发布时间】:2013-11-10 02:35:46
【问题描述】:
在我的 AuthenticateRequest 事件处理程序中,我设置了 Thread 的主体。这是我的 IHttpModule 的一部分:
public void Init(HttpApplication context)
{
context.AuthenticateRequest += AuthenticateRequest;
}
private void AuthenticateRequest(object sender, EventArgs e)
{
var principal = CreatePrincipal();
HttpContext.Current.User = principal;
}
但是我有一个程序集,它不应该访问 System.Web,所以我不能使用 HttpContext.Current.User,但我需要访问当前主体。我的第一个想法是将我的方法更改为:
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = principal;
并在需要时使用 Thread.CurrentPrincipal。
但据我所知,将请求特定的内容存储在线程本地存储中是不安全的,因为多个线程可以处理同一个请求,所以我想 Thread.CurrentPrincipal 也是如此。还是不行?
【问题讨论】:
-
听起来您可以更改程序集 - 是否无法将它需要处理的主体传递给它?
-
最近在类似的情况下,我只是强制调用者提供主体对象。
-
这就是我要做的——注入主体。无论如何,我希望有更好的方法
标签: asp.net .net httpcontext