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