C# 如何在登录.net core 3.1 web应用程序时在startup.cs中设置全局数据?
我的.net core 3.1 web应用程序从用户必须登录开始,同时选择公司/分支机构(CompanyCode)。 现在,我如何以及在何处保存此应用程序数据“CompanyCode”,以便在会话的其余部分中使用。 我已经找到了在startup.cs文件中设置其他静态全局变量(常量)的方法C# 如何在登录.net core 3.1 web应用程序时在startup.cs中设置全局数据?,c#,asp.net-core,global-variables,asp.net-core-3.1,web-application-project,C#,Asp.net Core,Global Variables,Asp.net Core 3.1,Web Application Project,我的.net core 3.1 web应用程序从用户必须登录开始,同时选择公司/分支机构(CompanyCode)。 现在,我如何以及在何处保存此应用程序数据“CompanyCode”,以便在会话的其余部分中使用。 我已经找到了在startup.cs文件中设置其他静态全局变量(常量)的方法 public void ConfigureServices(IServiceCollection services) { Action<GlobalData&g
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")));
}
现在CompanyCode是登录后设置的动态全局数据;我怎样才能做到呢?
请帮忙。
多亏了一种快速的方法是在静态类中集中所有常量(假设这些值在开发过程中是固定的,而不是配置设置),最好也是最简单的方法是
- 使用JWT进行身份验证,这样您就可以简单地将companyCode包含在您的令牌中,并且没有人可以篡改它
- 登录时将公司代码存储在httpOnly cookie中。然后,Cookies会自动包含在您的webapp的每个请求中。当然,要使此解决方案起作用,您需要要求您的用户启用cookies(这是可以的,许多网站都启用了cookies)
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();
}
}
公共类AccountController:控制器
{
私有只读IOPS_globalData;
公共帐户控制器(IOptions globalData)
{
_globalData=globalData;
}
[HttpPost]
公共IActionResult登录()
{
var originalData=_globalData.Value.CompanyCode;
//成功登录后
//用您选择的“公司代码”替换低于100的代码,
_globalData.Value.CompanyCode=100
返回视图();
}
}
请参阅因为这是一个网站,我假设会有多个同时的用户,因此任何类型的全局“用户”设置都是错误的。登录时,服务器将发回标识该用户的令牌,然后浏览器将该令牌发回服务器,以允许其标识用户设置。我建议你看一些关于@Neil的例子,你不需要使用令牌登录。看看如何使用JWT。如果两个来自不同公司的用户登录,这将如何工作?
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();
}
}