在Azure应用网关后面的ServiceStack元数据重定向不起作用

时间:2018-10-25 18:34:53

标签: servicestack

我的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错误,直到我弄清楚了。我看过其他帖子,声称可以进行此更改并且可以正常运行,但不适用于我。

请帮助!

2 个答案:

答案 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时可以使用吗?