我如何获得网关的url在微服务中进行分页



我正在用。net 6 web api编写一个带网关的微服务架构。我的网关在本地5000端口上运行,
微服务在本地5001端口上运行,其他微服务运行在本地的5002端口上我想在微服务中进行分页,我用分页链接返回响应,如下一个,上一个…当我向网关上的微服务发出请求时,我得到的响应如下

"links": {
"_previous": "https://localhost:5001/api/customers/5/5?page=4&size=5",
"_next": "https://localhost:5001/api/customers/5/5?page=6&size=5",
"_first": "https://localhost:5001/api/customers/5/5?page=1&size=5",
"_last": "https://localhost:5001/api/customers/5/5?page=1207&size=5"
},   

,但我希望链接来的主机(localhost:5000)的网关,如下面的例子

"_previous": "https://localhost:5000/api/customers/5/5?page=4&size=5"

我看了样本问题,我在互联网上做了研究,但不知何故,我无法在微服务上获得网关主机。我应该如何在微服务

中设置网关的主机?使用ocelot作为网关

你需要让你的服务知道它运行在反向代理后面。

// in ConfigureServices
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
// in Configure
app.UseForwardedHeaders();

更多信息:配置ASP。. NET Core与代理服务器和负载平衡器一起工作

但我不确定Ocelot在转发请求时设置X-Frowarded头。由于它被维护人员抛弃了,更好的选择是用Yarp代替Ocelot。它会在所有请求中添加必需的标头。

最新更新