登录.net core 3.1 web应用程序后,如何在startup.cs中设置全局数据



My.net core 3.1 web应用程序从用户必须登录开始,同时选择公司/分支机构(CompanyCode(。现在,我如何以及在哪里保存这个应用程序数据"CompanyCode",以便在会话的其余部分使用。我已经找到了在startup.cs文件中设置其他静态全局变量(常量(的方法。

public void ConfigureServices(IServiceCollection services)
{
Action<GlobalData> gData = (g =>
{
g.CompanyCode = 2;
g.DummyCust = 3;
g.Type_Personal = 0;
g.Type_Asset = 1;
g.Type_Bank = 2;
g.Type_Customer = 1;
g.Type_Staff = 2;
});
services.Configure(gData);
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<GlobalData>>().Value);
services.AddControllersWithViews();
services.AddDbContext<ImgContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ImgContext")));
}

GlobalData类定义:

namespace Imagetech.Data
{
public class GlobalData
{
public int CompanyCode { get; set; }
public int Type_Personal { get; set; }
public int Type_Asset { get; set; }
public int Type_Bank { get; set; }
public int Type_Customer { get; set; }
public int Type_Staff { get; set; }
public int DummyCust { get; set; }
}
}

现在CompanyCode是登录后要设置的动态全局数据;我怎样才能做到这一点?请帮忙。感谢

最好、最简单的方法是

  1. 成功登录后,将companyCode返回给调用者

  2. 调用者(可能是一个javascript应用程序,将全局存储companyCode,例如本地存储。(

  3. 让调用者在请求头中包含companyCode。

  4. 这样你就可以读取标题并获得公司代码。

让这更容易的几种方法-

  • 使用JWT进行身份验证,这样您就可以简单地将companyCode包含在令牌中,没有人可以篡改它。

  • 登录时将companyCode存储在httpOnly cookie中。Cookie会自动包含在您的网络应用程序的每个请求中。当然,为了让这个解决方案发挥作用,你需要要求你的用户启用cookie(这是可以的,许多网站都启用了。(

现在我如何以及在哪里保存此应用程序数据"CompanyCode",以便在会话的其余部分使用。

您也可以在登录控制器/剃刀页面中使用DI来获取和设置CompanyCode,例如

public class AccountController : Controller
{
private readonly IOptions<GlobalData> _globalData;
public AccountController(IOptions<GlobalData> globalData)
{
_globalData = globalData;
}
[HttpPost]
public IActionResult Login()
{
var originalData = _globalData.Value.CompanyCode;
//after login successfully
//replace below 100 with your selected `CompanyCode`,
_globalData.Value.CompanyCode = 100
return View();
}
}

请参阅ASP中的全局变量。Net Core 2

一种快速的方法是将所有常量集中在一个静态类中(假设这些值在开发过程中是固定的,而不是配置设置(

最新更新