Обработчики HTTP и модули отлично работают в Mono.
Ваша проблема в том, что в файле Web.config
используется синтаксис, специфичный для режима IIS «Интегрированный конвейер». Этот режим не существует в Apache / mod_mono. Таким образом, вы должны использовать старый синтаксис (т. Е. Синтаксис для режима «Классический конвейер») и предоставить раздел <system.web/httpHandlers>
в дополнение к существующему разделу <system.webServer/handlers>
.
См. Web.config
пример:
<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" />
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<add name="Feed" path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
</configuration>
Тег <validation ...>
очень важен: если вы его забудете, IIS выдает ошибку и жалуется, что в контексте Integrated Pipeline используется неавторизованный раздел.
Следующим шагом является указание серверу Apache перенести обработку ваших файлов в mod_mono, например:
<VirtualHost *:80>
ServerName mono.localhost
DocumentRoot "/Library/WebServer/Documents/MonoTest"
AddType application/x-asp-net .rss
</VirtualHost>
Линия AddType application/x-asp-net .rss
является важной. См. Отношение между path="*.rss"
в Web.config
и .rss
расширением в этой строке.
Если вы хотите обработать все расширения, как в вашем примере (path="*"
), вы должны заменить строку AddType application/x-asp-net .rss
на ForceType application/x-asp-net
.