Можно ли перенаправить ссылку, заканчивающуюся на .aspx, на .ashx? - PullRequest
0 голосов
/ 17 января 2011

У нас есть недавно выпущенный веб-сайт, основанный в основном на SharePoint. Некоторым сайтам нужно было возвращать просто прямой XML. Консультанты по проекту реализовали возврат XML как страницы ASPX, которые записывают объект ответа в методе page_load.

После непродолжительного изучения этого, я полагаю, что это, вероятно, неправильный способ сделать это, потому что он вызывает все дополнительные события для страницы ASPX, которые нам не нужны.

Вот мой вопрос, я хочу воссоздать эти функции как ссылки .ashx с httphandler. Однако я хочу сохранить оригинальные ссылки, оканчивающиеся на .aspx, и параметры get, сопровождающие их, чтобы решить, какой тип XML возвращать.

Возможно переписать / перенаправить конечные ссылки .aspx в ссылку .ashx. Или это приведет к тому, что сервер IIS неправильно интерпретирует каждый файл .aspx?

1 Ответ

0 голосов
/ 17 января 2011

Я думаю, тебе, вероятно, повезло ...

Мы сделали похожую вещь. Наше веб-приложение электронной коммерции принимает в качестве изображений продуктов только файлы JPG, PNG и GIF, но мы хотели, чтобы каждое изображение создавалось динамически для каждого продукта.

Итак, мы переназначили файлы JPG, PNG и GIF, чтобы они стали обработчиками.

Однако мы не хотели, чтобы ALL JPG, PNG и GIF-файлы отображались, поскольку это было бы чрезвычайно неэффективно для статических файлов, поэтому мы сделали только определенные.

Вот как это сделать.

Если все ваши ASPX-файлы соответствуют схожим спецификациям файлов, которые НЕТ других файлов, добавьте их в web.config в <httpHandlers>.

<add path="filespec*.aspx" verb="*" type="MyAssembly.MyHandlerName, MyAssembly"/>

Если они не все совместно используют спецификацию файла, вам придется добавить их один за другим в web.config:

<add path="oldaspx1.aspx" verb="*" type="MyAssembly.MyHandlerName, MyAssembly"/>
<add path="oldaspx2*.aspx" verb="*" type="MyAssembly.MyHandlerName, MyAssembly"/>
<add path="oldaspx3*.aspx" verb="*" type="MyAssembly.MyHandlerName, MyAssembly"/>

Чтобы сделать это полезным, независимо от того, работаете вы в интегрированном конвейере IIS7 или нет, вы также можете добавить аналогичные строки к элементу <handlers>

Затем, когда приходит запрос на 'oldaspx1.aspx', он будет обработан (очень эффективно, без запуска жизненного цикла страницы) вашим пользовательским обработчиком.

Если это решит вашу проблему, отметьте его как принятый ответ с галочкой слева.

...