У меня есть приложение, написанное с использованием C # поверх платформы ASP.NET MVC 5.
Вместо использования встроенной ClaimsPrincipal
реализации интерфейса IPrincipal
, я хочук используемой MyOwnClaimsPrincipal
реализации. Мой класс MyOwnClaimsPrincipal
реализует интерфейс IPrincipal
.
Другими словами, я хочу иметь возможность доступа к экземпляру MyOwnClaimsPrincipal
из класса AuthorizeAttribute
или как свойство User
в контроллереи виды.
вот пример того, что я хочу иметь возможность сделать
public class TestAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// This does not work
MyOwnClaimsPrincipal user1 = filterContext.HttpContext.User as MyOwnClaimsPrincipal;
// Yet, this works which tells me that my mplementation is not being used
ClaimsPrincipal user2 = filterContext.HttpContext.User as ClaimsPrincipal;
}
}
Я пытался использовать метод Application_BeginRequest
в Global.asax.cs
для установки Thread.CurrentPrincipal
и HttpContext.Current.User
в начале каждого запроса примерно так:
public void Application_BeginRequest()
{
var user = new MyOwnClaimsPrincipal();//...
Thread.CurrentPrincipal = user;
HttpContext.Current.User = user;
}
К сожалению, это не сработало. filterContext.HttpContext.User
по-прежнему установлен на ClaimsPrincipal
, и когда я приводил его как MyOwnClaimsPrincipal
, возвращается ноль.
Как правильно настроить единственную реализацию IPrincipal
, которая будет использоваться в приложении