У меня есть базовый контроллер, единственная цель которого - получить значение int
из HttpContext.Session
и сделать его доступным для всех наследующих контроллеров.
Теперь я пытаюсь перенаправить в представление входа в систему, когдауказанное значение не установлено, и пользователь пытается получить доступ к ограниченному представлению без входа в систему.
Это то, что я получил до сих пор:
public class BaseController : Controller
{
protected int? BranchId
{
get { return (HttpContext.Session.GetInt32("BranchId") as int?); }
set {}
}
public BaseController() {}
}
public class RedirectingActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (BranchId < 1) // BUT BranchId DOES NOT EXIST IN THIS CONTEXT
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Login"
}));
}
}
}
public class EmployeesController : BaseController
{
private readonly VaktlisteContext db;
private readonly IMapper auto;
public EmployeesController(VaktlisteContext context, IMapper mapper)
{
db = context;
auto = mapper;
}
[RedirectingAction]
public async Task<IActionResult> Index()
{
Branch branch = await db.Branches.Include(e => e.Employees)
.Where(b => b.Id == BranchId).FirstOrDefaultAsync();
if (branch == null) return NotFound();
BranchViewModel vm = auto.Map<BranchViewModel>(branch);
return View(vm);
}
}
Я прочитал на этот вопрос и ответ , но не смог понять, как решение может быть применимо в моем случае.
Есть предложения?