c# - 使用 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=abc
CDN 置于一切中间之前,这是完美的。现在,只要有人通过返回 url 访问一个页面,他们就会绕过 CDN 进行其余的访问。
问题
现在https://www.sitename.com/currentpage?params=abc
在页面中生成指向 CDN 的正确方法是什么?
该代码是开源的,我想保持它的灵活性,以便其他人可以轻松地托管它。
似乎我需要将应用程序设置PreferredHostName
设置为 www.sitename.com。
但随后 URL 的组成似乎很混乱。我怀疑我错过了一些简单的东西。
解决方案
我最终在 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>
推荐阅读
- python - 在循环中将具有字符串格式的日期转换为时间戳
- python - How to get first 4 digits from an integer column in python
- javascript - 程序流程- requestAnimationFrame
- apache-pulsar - 如何在 Apache Pulsar 集群之间迁移数据?
- sql - SQL GROUP BY 与 LEFT JOIN MS SQL Server
- javascript - 具有附加功能的 Jest 自定义匹配器
- java - SpringBoot Webflux:使用响应式存储库将 POJO 保存在不同的表中
- kafka-consumer-api - Kafka 生产者可以更改主题以生成消息吗?
- javascript - 过滤模式中的嵌套数据域解析器
- python - 使用 Python 保存时来自终端的数据会被破坏