Попытка создать базовый контроллер, который наследуется на всем моем сайте при его динамической загрузке на основе пользовательской роли.OWIN Auth HTTPContext NULL на BaseController
Вопрос заключается в том, что он, кажется, всегда загружать и попытаться получить роль пользователя, даже если Owin еще не загружен и пользователь еще не вошли в систему.
Ниже BaseController имени LayoutController
[Authorize]
public class LayoutController : Controller
{
public List<NavigationMenuModel> MainLayoutViewModel { get; set; }
public LayoutController()
{
this.MainLayoutViewModel = new List<NavigationMenuModel>();
using (var context = new OperationalDataContext())
{
//The BELOW LINE IS ISSUE
var username = HttpContext.GetOwinContext().Authentication.User.Identity.Name;
var pages = context.GET_PAGES_BY_USERNAME(username);
var pagesTop = pages.Where(x => x.Parent == null);
foreach (var page in pagesTop)
{
var tmpNM = new NavigationMenuModel();
tmpNM.DisplayName = page.Name;
tmpNM.RelativeUrl = page.RelativeUrl;
var children = pages.Where(x => x.Parent != null && x.Parent.Equals(page.Name) && x.Site.Equals("PRODUCT"));
List<NavigationMenuModel> tmpChildren = new List<NavigationMenuModel>();
foreach (var child in children)
{
var tmpC = new NavigationMenuModel();
tmpC.DisplayName = child.Name;
tmpC.RelativeUrl = child.RelativeUrl;
var children1 = pages.Where(x => x.Parent != null && x.Parent.Equals(child.Name) && x.Site.Equals("PRODUCT"));
List<NavigationMenuModel> tmpChildren1 = new List<NavigationMenuModel>();
foreach (var child1 in children)
{
var tmpC1 = new NavigationMenuModel();
tmpC1.DisplayName = child1.Name;
tmpC1.RelativeUrl = child1.RelativeUrl;
tmpChildren1.Add(tmpC1);
}
tmpC.Children = tmpChildren1;
}
tmpNM.Children = tmpChildren;
this.MainLayoutViewModel.Add(tmpNM);
}
}
this.ViewBag["MainLayoutViewModel"] = this.MainLayoutViewModel;
}
}
Тогда есть dashboardController (домашняя страница)
public class DashboardController : LayoutController
{
// GET: Dashboard
public ActionResult Index()
{
return View("Index");
}
}
у нас есть простой, основанный логин печенья, которое позволяет anayomous
public class AccountController : Controller
{
IAuthenticationManager AuthenticationManager
{
get { return HttpContext.GetOwinContext().Authentication; }
}
[HttpGet]
[AllowAnonymous]
[Route("login")]
public ActionResult Login()
{
return View("Login");
}
}
}
В startup.css
public void ConfigureAuthentication(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Login"),
});
}
Проблемы, кажется, что он не перенаправляет войти, прежде чем пытаться перейти к разводке.
AccountController не ссылается на LayoutController.