获取ServiceStack实例的基本URL

时间:2014-01-15 16:59:14

标签: c# servicestack hateoas servicestack-bsd

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

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

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

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

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

有没有更好的方法来获取此基本网址?

1 个答案:

答案 0 :(得分:4)

我会通过检查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注意到路径不包含前导斜杠,因此它必须以/作为前缀才能成为有效的静态路径。