Asp.net core 如何在Startup.cs中获取当前域名

Asp.net core 如何在Startup.cs中获取当前域名,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我有一个域,它下面有多个站点 在myStartup.cs中,我有以下代码 public void ConfigureServices(IServiceCollection services) { services.AddIdentity<ApplicationUser, ApplicationRole>(options => { options.Cookies.ApplicationCookie.CookieName = "MyAppName";

我有一个域,它下面有多个站点

在my
Startup.cs
中,我有以下代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
    {
        options.Cookies.ApplicationCookie.CookieName = "MyAppName";
        options.Cookies.ApplicationCookie.ExpireTimeSpanTimeSpan.FromMinutes(300);
     })
     .AddEntityFrameworkStores<MyDbContext, Guid>()
     .AddDefaultTokenProviders();
我该怎么做

我问的原因是:

我可以在Chrome开发者工具中看到cookies属于我访问的站点的不同域名。然而,有时我还是会遇到这样的情况:当我在两台不同的服务器上登录到同一个站点时,我无法登录到其中一台服务器,而且它也不会记录任何错误。唯一的解决办法是使用另一个浏览器,因此我只能假设症状只能与cookie有关


因此,我的问题实际上只是一个个人偏好问题,因为在我的环境中,我更愿意将域名附加到cookie名称之后,尽管cookie只能属于特定的域。

首先,我将在配置中存储域名。因此,它将使我能够为当前环境更改它

options.Cookies.ApplicationCookie.CookieName = Configuration["DomainName"];
如果您不喜欢这种方式,您可以像这样在登录事件上覆盖cookie选项(我不确定以下方式是否好):

或捕获配置和覆盖选项中的第一个请求

        bool firstRequest = true;
        app.Use(async (context, next) =>
        {
            if(firstRequest)
            {
                options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString();
                firstRequest = false;
            }
            await next();
        });

另请参见类似问题

如果他们有单独的域名,Cookie已被分离。我真的不明白实际的问题是,如果我查看Chrome开发工具,每个域下的cookie是分开的。比方说,我想这样做并不是因为一个特定的原因,只是为了让cookie名称包含我个人偏好的域名,我最近搬到了Docker。虽然我的Web服务器侦听localhost:5000,但它实际上是托管在:80上的,因此它很少用于检查Startup.cs中的托管参数。所以对我来说,配置设置是最好、最简单、最灵活的方式。@Rob van der Veer,正如你所说,对于你的情况来说,它可能是最好的,但不是对每个人都是最好的,因为存在服务于多个域的应用程序。
Events = new CookieAuthenticationEvents()
{
   OnSigningIn = async (context) =>
   {
       context.Options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString();
   }
}
        bool firstRequest = true;
        app.Use(async (context, next) =>
        {
            if(firstRequest)
            {
                options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString();
                firstRequest = false;
            }
            await next();
        });