Я пытаюсь сделать переменную int
BranchId
доступной через мое приложение с помощью HttpContext.Session.GetInt32("BranchId").Value
.
Когда я собираюсь из моей собственной попытки и из ответа на этот вопрос , этот подход не будет работать:
Базовый класс контроллера:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Vaktliste.Controllers
{
public class MyBaseControllerClass : Controller
{
public readonly int branchId;
public MyBaseControllerClass()
{
var s = HttpContext.Session; // <-- This causes a NULL exception
// SET THE VARIABLE HERE:
BranchId = s.GetInt32("BranchId") != null
? s.GetInt32("BranchId").Value
: 0;
}
}
}
Пример другого контроллера в приложении:
namespace Vaktliste.Controllers
{
public class BranchesController : MyBaseControllerClass
{
private readonly VaktlisteContext db;
public BranchesController(VaktlisteContext context)
{
db = context;
}
public async Task<IActionResult> Details(int? id)
{
// USE THE VARIABLE HERE:
if (id == null) id = BranchId;
if (id == null) return NotFound();
var branch = await db.Branches
.Where(m => m.Id == id)
.FirstOrDefaultAsync();
if (branch == null) return NotFound();
HttpContext.Session.SetInt32("BranchId", branch.Id);
return View(branch);
}
}
}
Конечно, я мог бы сделать GetInt32("BranchId")
на каждом контроллере, но я хочу, чтобы он оставался СУХИМ (не повторяйте себя).Как это можно сделать?