2
我有一个FileSystemBlobProvider,它需要将物理映射到虚拟路径,反之亦然。我也需要访问主机名(我需要生成一个给定应用程序相对路径的公共URL)。理想情况下,这应该独立于主机(Asp.Net或自托管)。获取独立于主机的ServiceStack应用程序的应用程序物理和虚拟根目录
任何指针都会有帮助。
我有一个FileSystemBlobProvider,它需要将物理映射到虚拟路径,反之亦然。我也需要访问主机名(我需要生成一个给定应用程序相对路径的公共URL)。理想情况下,这应该独立于主机(Asp.Net或自托管)。获取独立于主机的ServiceStack应用程序的应用程序物理和虚拟根目录
任何指针都会有帮助。
你只能得到一个HTTP请求与范围内访问主机名称:
base.Request.Headers["Host"]
这也是反向代理敏感。如果您在此之外需要它,我会在Web.config中添加一个用户定义的条目。
根据您的使用情况,你也可以从IHttpRequest
访问虚拟和物理路径:
base.Request.PathInfo
base.Request.ApplicationFilePath
而且ServiceStack包括VirtualFileSystem,您可以使用访问:
EndpointHost.VirtualPathProvider
你可以查询获取ServiceStack所在根目录的虚拟路径和物理路径:
EndpointHost.VirtualPathProvider.RootDirectory.VirtualPath
EndpointHost.VirtualPathProvider.RootDirectory.RealPath
谢谢德米斯。我结束了使用EndpointHost.VirtualPathProvider。顺便说一句 - 使用ServiceStackHttpHandlerFactory.GetBaseUrl()来确定主机名是否可靠? – JBland 2013-03-06 11:42:55
它不是100%,它首先查看'Config.WebHostUrl',如果没有设置,它会查找从第一个HTTP请求中填充的'ApplicationBaseUrl'。这对第一个请求是如何敏感的,例如,别名/虚拟主机/反向代理/等。我的建议是手动设置'Config.WebHostUrl'。 – mythz 2013-03-06 11:58:09
我刚刚在我的配置文件中选择了一个设置。谢谢。 – JBland 2013-03-06 14:13:17