1

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

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

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

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

4

1 回答 1

2

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

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

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

覆盖 ServiceStack 的默认行为

ServiceStack 操作顺序中的前 2 个钩子允许您注入自定义逻辑并处理静态文件请求以覆盖 ServiceStack 的默认行为,两者都是可配置的,并且在这两种情况下,如果您想劫持请求,AppHost.Configure()您都可以返回:IHttpHandler

1) Config.RawHttpHandlers:

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

2) IAppHost.CatchAllHandlers:

this.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => ...);
于 2013-02-20T08:19:59.300 回答