繁体   English   中英

如何在登录 .net core 3.1 Web 应用程序时在 startup.cs 中设置全局数据?

[英]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 是登录后要设置的动态全局数据; 我怎样才能实现它? 请帮忙。 谢谢

最好,最简单的方法是

  1. 登录成功后,将 companyCode 返回给来电者

  2. 调用者(可能是一个 javascript 应用程序,将在全球范围内存储 companyCode,例如 localstorage。)

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

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

一些使这更容易的方法 -

  • 使用 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();
    }
}

参考ASP.Net Core 2 中的全局变量

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM