【发布时间】:2018-12-19 15:25:34
【问题描述】:
我正在尝试通过使用HttpContext.Session.GetInt32("BranchId").Value 使int 变量BranchId 在我的应用程序中可用。
根据我自己的尝试以及对this question 的回答,这种方法行不通:
基本控制器类:
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"),但我想让它保持干燥(不要重复自己)。怎么办?
【问题讨论】:
-
您可以在基类中将分支 id 设为 Lazy
,然后在请求期间(而非构造函数)可用。
标签: c# session asp.net-core-mvc httpcontext