首页 > 解决方案 > 使用 CDN 时的 ASP.Net Core ReturnURL?

问题描述

设置

一个从 Core 2.2 升级到 ASP.Net Core 3.1 的 ASP.Net Core MVC 网站。它刚刚被移到 CDN 后面。全部在 Azure 上。

指向 CDN(通过 CNAME)的公共 URL 是 www.sitename.com。CDN 指向的后端服务器 url 是 coreaz.sitename.com。

一切都是https,并且似乎运行良好。CDN 和核心站点具有适当的证书。

问题

各个地方的 ReturnUrl 由以下内容组成:

Context.Request.GetEncodedUrl()

在将https://coreaz.sitename.com/currentpage?params=abcCDN 置于一切中间之前,这是完美的。现在,只要有人通过返回 url 访问一个页面,他们就会绕过 CDN 进行其余的访问。

问题

现在https://www.sitename.com/currentpage?params=abc在页面中生成指向 CDN 的正确方法是什么?

该代码是开源的,我想保持它的灵活性,以便其他人可以轻松地托管它。

似乎我需要将应用程序设置PreferredHostName设置为 www.sitename.com。

但随后 URL 的组成似乎很混乱。我怀疑我错过了一些简单的东西。

标签: c#asp.netasp.net-mvcasp.net-core

解决方案


我最终在 SettingsService 类中使用此方法重构 URI。

    public string GetPreferredUri(HttpRequest request)
    {
        var preferredhost = _config["PreferredHost"];
        if (!String.IsNullOrWhiteSpace(preferredhost))
        {
            request.Host = new HostString(preferredhost);
        }

        var absoluteUri = string.Concat(
                    request.Scheme,
                    "://",
                    request.Host.ToUriComponent(),
                    request.PathBase.ToUriComponent(),
                    request.Path.ToUriComponent(),
                    request.QueryString.ToUriComponent());

        return absoluteUri;
    }

我从 .cshtml 页面调用它:

[...]
@inject SettingsService settingsService

[...]

<a class="nav-link pt-0" asp-area="" asp-controller="Account" asp-action="Login"
       asp-route-returnUrl="@settingsService.GetPreferredUri(Context.Request)">Log in</a>

推荐阅读