Identity 2.0: Criando ClaimIdentity personalizado, por exemplo: User.Identity.GetUserById <int> (int id) para validação por solicitação

Veja esta pergunta semelhante:Precisa acessar mais propriedades do usuário em User.Identity

Gostaria de criar métodos de autenticação personalizados para usar com o meu Razor Views que permite fácil acessoIdentityUser propriedades relacionais ao objeto User.Identity, mas não tenho certeza de como fazê-lo. Quero criar várias extensões personalizadas semelhantes aUser.Identity.GetUserName(), User.Identity.GetUserById(), etc ... em vez de usar esteViewContextExtension método. Meu tipo de autenticação é atualmente o tipo padrãoDefaultAuthenticationTypes.ApplicationCookie do modelo VS2013 MVC5. Como o Shoe afirmou, preciso que essa reivindicação seja inserida após o usuário fazer login.

Minhas perguntas são:

Como e onde você cria uma declaração personalizada com um parâmetro out dethis IIdentity sob IPrincipal?

Isso me permitiria acessar as propriedades do usuário via CookieAuthentication em um modo de exibição para entidades em uma configuração DDD onde eu tenho vários DbContexts em um único aplicativo usando o Identity 2.0. Acabarei usando a WebAPI, mas por enquanto quero mantê-la o mais simples possível. eu encontreineste SO Q&A mas é voltado para formulários da Web usando tickets. Não tem certeza da diferença entre tickets e tokens?

Essa é a abordagem atual que usaViewContext de um controlador base:

Visão:

    @using Microsoft.AspNet.Identity
    @using Globals.Helpers
    @using Identity //custom Identity for Domain
    @using Microsoft.AspNet.Identity.Owin

    @if (Request.IsAuthenticated)
    {
          var url = @ViewContext.BaseController().GetAvatarUrlById(User.Identity.GetUserId<int>());

        //...
    }

BaseController.cs

        public string GetAvatarUrlById(int id)
        {

            var user = UserManager.FindById(id);

            return "../../" + user.ImageUrl;
        }

Extensions.cs

    public static class ViewContextExtension
    {
        public static BaseController BaseController(this ViewContext view)
        {
            var baseController = (BaseController)view.Controller;
            return baseController;
        }
    }

O que estou procurando é apenas onde e como?

Visão:

<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />

SOLUÇÃO

Eu simplesmente editei oExtension.cs arquivo e herança usada para o controlador Base, que é usado para o _LoginPartial.cshtml e editado oViewContextExtension classe:

#region ViewContextExt
public static class ViewContextExtension
{
    public static BaseController BaseController(this ViewContext view)
    {
        var baseController = (BaseController)view.Controller;
        return baseController;
    }

    public static string GetAvatarUrl(this IIdentity identity)
    {
        return ((ClaimsIdentity)identity).Claims.First(c => c.Type == "AvatarUrl").Value;
    }
}

}

endregion

questionAnswers(2)

yourAnswerToTheQuestion