[英]How to set global data in startup.cs upon logging in .net core 3.1 web application?
我的 .net core 3.1 web 应用程序从用户必须登录开始,同时选择公司/分支机构(公司代码)。 现在我如何以及在哪里保存此应用程序数据“公司代码”,以便在会话的其余部分中使用。 我已经找到了在 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 是登录后要设置的动态全局数据; 我怎样才能实现它? 请帮忙。 谢谢
最好,最简单的方法是
登录成功后,将 companyCode 返回给来电者
调用者(可能是一个 javascript 应用程序,将在全球范围内存储 companyCode,例如 localstorage。)
让调用方在请求标头中包含 companyCode。
这样您就可以读取标题并获取公司代码。
一些使这更容易的方法 -
使用 JWT 进行身份验证,这样您就可以简单地将 companyCode 包含在您的令牌中,并且没有人可以篡改它。
登录时将 companyCode 存储在 httpOnly cookie 中。 然后 Cookie 会自动包含在对您的 web 应用程序的每个请求中。 当然,要使此解决方案起作用,您需要要求您的用户启用 cookie(这很好,许多网站都这样做。)
现在我如何以及在哪里保存此应用程序数据“公司代码”,以便在会话的其余部分中使用。
例如,您还可以在登录控制器/剃须刀页面中使用 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();
}
}
一种快速的方法是将所有常量(假设这些值在开发过程中固定,而不是配置设置)集中在一个静态类中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.