更改静态内容的虚拟路径

时间:2013-02-19 18:28:27

标签: servicestack static-content

我正在开发一个项目,这个项目是一个托管两个独立“插件”的自托管服务堆栈站点。我正在尝试设置它,以便我可以从插件目录中提供我的静态内容文件,以便我可以在调试时动态编辑它们,而不需要重建将chages复制到bin目录。

我已经通过添加以下内容为我的剃刀文件工作:

Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project1") });
Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project2") });

我似乎无法弄清楚如何为我的静态内容文件做同样的事情。似乎我可以通过添加EndpointHostConfig.Instance.WebHostPhysicalPath = "../../../ProjectName";一次修复一个项目,但不能同时添加两个项目?有没有办法为所有服务的文件而不仅仅是剃刀文件设置虚拟路径提供程序?

1 个答案:

答案 0 :(得分:2)

ServiceStack尚未切换为使用VirtualPathProvider来处理静态文件内容。

确定对静态文件的请求发生在ASP.NET请求管道的开始(即在它到达ServiceStack的IHttpHandler之前),在此处解析VirtualPathProvider并不理想(即耦合)。

我们目前正在研究使用虚拟路径的后果,因为它会使主机Web服务器所期望的物理路径无效。

覆盖ServiceStack的默认行为

first 2 hooks in ServiceStack's Order of operations允许您注入自定义逻辑并处理静态文件请求以覆盖ServiceStack的默认行为,两者都可在AppHost.Configure()中配置,在这两种情况下,如果您可以返回IHttpHandler想要高举请求:

1)Config.RawHttpHandlers:

SetConfig(new EndpointHostConfig { 
    RawHttpHandlers = { (httpReq) => ... },
});

2)IAppHost.CatchAllHandlers:

this.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => ...);