Вы можете написать собственный фильтр действий, который выполняется при каждом запросе (вы регистрируете его как глобальный фильтр). Этот фильтр будет загружать пользователя (например, из хранилища пользователя) и помещать его в http-контекст, например, или в ViewData.
EDIT:
Хорошо, код для фильтра может выглядеть следующим образом (в этом случае он загружает пользователя в коллекцию ViewData). Я не рассматривал анонимных пользователей здесь.
public class LoadUserToViewDataAttribute : ActionFilterAttribute
{
private IUserRepository _userRepository;
public LoadUserToViewDataAttribute(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = filterContext.Controller;
var userName = filterContext.HttpContext.User.Identity.Name;
var user = _repository.GetUser(userName);
controller.ViewData.Add("CurrentUser", user);
}
}