Перехватить вывод из обработчика по умолчанию с другим HttpHandler - PullRequest
0 голосов
/ 19 марта 2011

Я настроил HttpHandler для *css для выполнения простого анализа:

    <handlers>
        <add name="CssHandler" verb="*" path="*.css" 
           type="MyApp.CssProcessor,MyApp.Assembly"/>
    </handlers>

Все было хорошо, пока я не добавил ресурс, который динамически загружает файл css, например,

<link rel="stylesheet" type="text/css" href="/loader.ashx/module.resource.css" >

К моему удивлению, все пошло не так.Пользовательский обработчик http перехватывает это, но поскольку он предназначен только для загрузки файлов из файловой системы, он не работает.Я понимаю, что технически это соответствует шаблону *.css, но это кажется странным поведением, поскольку фактический ресурс, запрашиваемый с веб-сервера, равен *.ashx, а css указывается только после пути к файлу в качестве параметра.

Можно ли сделать так, чтобы фильтр для обработчика применялся только к фактическому имени ресурса сервера?

В качестве альтернативы (и на самом деле я хотел бы знать, как это сделать в любом случае) - что бы я хотелна самом деле лучше всего перехватывать вывод из обработчика css по умолчанию.То есть вместо того, чтобы иметь весь собственный код для загрузки файлов из файловой системы в моем обработчике CSS, кажется, было бы гораздо проще просто взять ответ из обработчика по умолчанию и отфильтровать его.Который работал бы должным образом в этой ситуации.

Наконец, в любом случае, я бы предпочел фильтровать по типу MIME ресурса text/css, а не перехватывать запросы по имени, так как я действительно хочу фильтровать любой CSS (а не что-либо происходящее).быть названным "* .css").Любые указатели о том, как это сделать?

1 Ответ

0 голосов
/ 19 марта 2011

Вы могли бы ... 1) Измените ваш обработчик, чтобы проверить, существует ли файл. 2) Используйте HttpModule для перехвата ответа. Не уверен, что именно вы делаете в этом сценарии, но на самом деле изменение выходных данных может быть сложным. 3) Измените аргумент, передаваемый в loader.ashx, чтобы он не заканчивался на .css (это довольно странно) 4) Попробуйте использовать "?" в качестве разделителя между loader.ashx и аргументом, поскольку существуют другие запросы (.axd), которые часто используют параметры строки запроса и по-прежнему работают должным образом.

...