2

确定运行 ServiceStack 实例的基本 URL 路径的最佳方法是什么?例如,如果我将 ServiceStack 配置为在 web.config 中的“/api”基本 URL 上运行,我如何获取字符串“/api”?我想获取此值以构建任意请求 DTO 的 URL,作为 HATEOAS 样式文档。

例如,如果我有一个SomeRequest带有[Route("/someRequest")]属性的请求 DTO,则此请求的完整 URL 将是“/api/someRequest”。ToUrl扩展方法仅返回基本 URL 下方路径的一部分:

new SomeRequest().ToUrl() // returns "/someRequest"

我还没有找到任何简单的方法来做到这一点。似乎 ServiceStack 没有公开返回“/api”基本路径值的配置属性。使用 ServiceStack 4 可能可以检查 web.config以获取 ServiceStack 处理程序路径,但我无法弄清楚如何使用我们当前的 SS 3 配置来执行此操作。

Request.GetAbsolutePath()方法将生成当前请求的完整路径,例如“/api/someRequest”,然后我可能会在此方法和ToUrl()扩展方法之间进行一些字符串比较以确定基本路径,但这似乎也是一个非常脆弱的解决方案.

有没有更好的方法来获取这个基本 URL?

4

1 回答 1

4

我将通过检查 ServiceStack AppHost 配置中的前缀来解决这个问题。从v3 文档

为了避免与您现有的 ASP.NET Web 框架发生冲突,建议将您的 ServiceStack Web 服务托管在自定义路径中。...

下面的位置配置(到您的根 Web.config 文件)在自定义路径托管您的 Web 服务:/api

...

您还需要在 AppHost 中配置根路径

因此,因为 ServiceStack 期望您在 AppHost 中使用这样的匹配路径对其进行配置:

public override void Configure(Container container)
{
    SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });
}

您可以直接从 ServiceStack 的配置中访问该值。

在 v3 中,它可以通过以下方式访问Service

GetAppHost().Config.ServiceStackHandlerFactoryPath

在 v4 中,您可以使用:

AppHost.Instance.Config.WebHostUrl

显然,如果 UrlExtensionsToUrl()方法已经执行了此检查并相应地添加了前缀,那将会很方便。


正如@esker 所指出的,该路径将不包含前导斜杠,因此它必须以 为前缀/才能成为有效的静态路径。

于 2014-01-15T17:28:46.890 回答