【问题标题】:Get base URL of ServiceStack instance获取 ServiceStack 实例的基本 URL
【发布时间】:2014-01-15 16:59:13
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • @Scott 关于 servicestack-bsd 标签 - 我们将使用它而不是 servicestack-v3?
  • 我确实尝试过discussing this on meta。如果某些东西与小于 3 的版本相关,有人反对 v3 特定标签——尽管我认为它们现在不存在。但是 BSD 似乎并不令人反感。我一直在使用它来解决明确适用于 v3 的新问题。
  • 我觉得我更喜欢 servicestack-bsd。很高兴知道。

标签: c# servicestack hateoas servicestack-bsd


【解决方案1】:

我会通过检查 ServiceStack AppHost 配置中的前缀来解决这个问题。来自v3 documentation

为了避免与您现有的 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

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


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

【讨论】:

  • 原来我没有设置ServiceStackHandlerFactoryPath。将此设置为“api”允许我构建您所显示的 URL。这也修复了元数据页面上报告的 URL。需要注意的一件事:如果您尝试使用前导斜杠设置ServiceStackHandlerFactoryPath 值,例如“/api”,则斜杠将被删除。因此,在使用该值生成 URL 时,可能需要在前面加上“/”。
  • @esker 说得好。我已在底部添加了此注释。
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2012-03-04
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多