gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:52:21 30 4
gpt4 key购买 nike

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

在我的 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();

在生产机器上,我的所有站点都位于 IIS 中同一站点下的子文件夹中所以我不想使用默认域作为 cookie 名称,否则不同的站点 cookie 将具有相同的名称

我想要的是获取当前域,例如 mydomain.com,然后将其附加到我在 Startup.cs 中指定的每个站点的显式 cookiename 中例如
 var domain = "get the server domain here somehow e.g. domain.com";
...
options.Cookies.ApplicationCookie.CookieName = "MyAppName." + domain;

我该怎么做呢?

我问的原因:

我可以在 Chrome 开发人员工具中看到 cookie 属于我正在访问的站点的单独域名。但是,有时我仍然会遇到以下情况:当我在两台不同的服务器上登录同一个站点时,我无法登录其中一台,并且它没有记录任何错误。唯一的解决方案是使用其他浏览器,所以我只能通过症状来假设只能与cookie有关。

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

最佳答案

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

options.Cookies.ApplicationCookie.CookieName = Configuration["DomainName"];

如果您不喜欢这种方式,您可以在这样的登录事件上覆盖 cookie 选项(我不确定以下方式是否合适):
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();
});

另见类似问题 How to get base url without accessing a request

关于asp.net-core - 如何在Startup.cs中获取当前域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020135/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com