Изменить виртуальный путь для статического контента
Я работаю над проектом, который представляет собой самодостаточный сайт стека служб, на котором размещены 2 отдельных плагина. Я пытаюсь настроить его так, чтобы я мог обслуживать свои файлы статического содержимого из каталогов плагинов, чтобы я мог редактировать их на лету во время отладки и не требовать перестройки для копирования изменений в каталог bin.
У меня уже есть это работает для моих бритвенных файлов, добавив это:
Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project1") });
Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project2") });
Я не могу понять, как сделать то же самое для моих файлов статического содержимого. Кажется, что я мог бы исправить один проект за один раз, добавив EndpointHostConfig.Instance.WebHostPhysicalPath = "../../../ProjectName";
но не оба одновременно? Есть ли способ установить поставщика виртуального пути для всех обслуживаемых файлов, а не только для бритвенных файлов?
1 ответ
ServiceStack не переключился на использование VirtualPathProvider
обрабатывать содержимое статических файлов.
Определение запроса для статического файла происходит в начале конвейера запросов ASP.NET (т.е. до того, как он достигает IHttpHandler в ServiceStack) в точке, где разрешается VirtualPathProvider
не является идеальным (т.е. сцепление).
В настоящее время мы изучаем последствия использования виртуального пути, поскольку он делает недействительным физический путь, ожидаемый хост-сервером.
Переопределение поведения ServiceStack по умолчанию
Первые 2 перехвата в Порядке операций ServiceStack позволяют вводить пользовательскую логику и обрабатывать статические запросы файлов, чтобы переопределить поведение ServiceStack по умолчанию, оба настраиваются в AppHost.Configure()
и в обоих случаях вы можете вернуть IHttpHandler
если вы хотите, чтобы хай-джек запрос:
1) Config.RawHttpHandlers:
SetConfig(new EndpointHostConfig {
RawHttpHandlers = { (httpReq) => ... },
});
2) IAppHost.CatchAllHandlers:
this.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => ...);