我的api作为应用程序服务托管在Azure上,其前面是Azure应用程序网关。
我已经在启动时设置了webhosturl,并且在查看元数据页面时可以正常运行,我看到指向正确位置的链接。这些链接起作用。但是,当我导航到我的api的基本URL时,它会将我重定向到应用程序服务URL。
这是我的创业公司的摘要...
SetConfig(new HostConfig
{
WebHostUrl = "https://api-dev.hsawaknow.net/link/",
DefaultRedirectPath = "/metadata",
DebugMode = AppSettings.Get(nameof(HostConfig.DebugMode), false)
});
请查看下面的链接并查看区别。
https://api-dev.hsawaknow.net/link/metadata
vs
https://api-dev.hsawaknow.net/link/
由于我使用的是自签名证书,因此您会收到https错误,直到我弄清楚了。我看过其他帖子,声称可以进行此更改并且可以正常运行,但不适用于我。
请帮助!
答案 0 :(得分:1)
我已经弄清楚了。我必须做几件事。
我要做的第一件事是设置转发的标头中间件,以识别和处理来自Azure应用程序网关的正确标头。
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHostHeaderName = "X-ORIGINAL-HOST";
options.ForwardedHeaders = ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedFor;
});
这使我的网站无需设置WebHostUrl即可使用指向正确页面的链接。关于使用Azure App Gateway的唯一警告是,它使用X-ORIGINAL-HOST而不是标准X-FORWARDED-HOST。
接下来,我必须基于appsettings.json中的设置在HostConfig上动态设置DefaultRedirectPath。在Azure App Gateway的情况下,我的公共URL为https://api-dev.hsawaknow.net/link/,由于在上一步中是如何设置主机头的,因此我不得不将重定向设置为/ link / metadata,而不仅仅是元数据。
进行了几次尝试,但是当在带有Azure Application Gateway的Azure App Services上托管时,此配置很好用。
对mythz的快速响应表示敬意,这为我指明了正确的方向。
答案 1 :(得分:0)
启用Request Logger,以便查看ServiceStack收到的请求。
在不指定WebHostUrl时可以使用吗?