То, что я делаю в своих приложениях и считаю лучшей практикой, - это загрузка ваших общих данных в ViewBag в конструкторе Controller.
Для каждого проекта у меня есть абстрактный класс DefaultController, который расширяет Controller.Таким образом, каждый контроллер в проекте должен наследоваться от DefaultController, а не Controller.В конструктор этого класса я загружаю все данные, общие для всего проекта, например:
// DefaultController.cs
public abstract class DefaultController : Controller
{
protected IRepository Repo { get; private set; }
protected DefaultController(IRepository repo)
{
Repo = repo;
ViewBag.CurrentUser = GetLoggedInUser();
}
protected User GetLoggedInUser()
{
// your logic for retrieving the data here
}
}
// HomeController.cs
public class HomeController : DefaultController
{
public HomeController(IRepository repo) : base(repo)
{
}
// ... your action methods
}
Таким образом, вы всегда будете иметь зарегистрированного пользователя доступным в ваших представлениях.