【问题标题】:Domain alias - how to determine which one was used in .net core 3.1?域别名 - 如何确定 .net core 3.1 中使用了哪一个?
【发布时间】:2020-08-31 05:12:40
【问题描述】:

我有一个在 IIS 10 上使用 .net core 3.1 的 Web 应用程序。我设置了我的主域,并且我有 3 个解析为主域名的别名域。对于我的应用,我想知道用户使用哪个域访问该站点。

我怎么能确定呢?任何能让我指出正确方向的帮助都会很棒。

谢谢!

【问题讨论】:

    标签: c# asp.net-core razor-pages domain-aliasing


    【解决方案1】:

    如果我理解正确,别名域只是一个附加域,它指向与您的主域相同的服务器,所以您没有被重定向到主域?即地址栏仍然显示用户用于访问您的网站的 URL。在这种情况下,它应该像从当前 URL 中读取主机名一样简单。您可以通过IHttpContextAccessor 获取该信息。

    第一步,在startup.cs文件中注册为服务

    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    

    第 2 步,通过 DI 使您的控制器依赖它:

    private readonly IHttpContextAccessor _httpContextAccessor;
    public YourController(IHttpContextAccessor httpContextAccessor)
    {
    _httpContextAccessor = httpContextAccessor;
    }
    

    第 3 步,从 httpContextAccessor 读取信息:

    string domain = _httpContextAccessor.HttpContext.Request.Host.Value;
    

    【讨论】:

    • IHttpContextAccessor 注入控制器(在大多数情况下从Microsoft 的控制器派生)没有多大意义,因为HttpContext 已经可以通过具有相同名称的属性访问而无需特殊的访问器。你写这个很可能是为了举例,但也许考虑将YourController 更改为某种经理、助手或任何一般服务,请记住 OP 没有说明他打算在哪里使用这种逻辑。
    • 感谢您的快速回复,并花时间发布代码。现在地址栏显示主域,无论最初输入的是哪个域,所以是的,它正在重定向。我不确定如何拦截请求并获取别名。也许我可以重新配置,以便使用别名将它们传送到相同的目的地。
    • 如果确实是重定向,那么您唯一的希望是通过与重定向一起传递的 HTTP 标头公开初始 URL,例如 REFERER 或 X_FORWARDED_FOR 标头。
    • @Prolog - 感谢您的回复。该应用程序有免费版本和付费版本。付费用户可以使用主域名和别名。免费用户只能使用主域名。一旦我知道他们进入了哪一个,我就可以编写逻辑来授予/拒绝他们使用所使用的域访问该站点。
    • 我能够调整 IIS 配置,特别是重写模块,因此不会发生重定向。然后很容易使用上面描述的 httpContext 访问别名。谢谢你们的帮助。
    猜你喜欢
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多