Внутри обработчика событий AuthenticateRequest я устанавливаю Thread main. Вот часть моего 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 Local Storage, поскольку несколько потоков могут обрабатывать один и тот же запрос, поэтому я думаю, что это то же самое с Thread.CurrentPrincipal. Или нет?