В чем разница между созданием обработчика с ashx/axd и использованием того, что я сам придумал в ASP.NET?

Это, вероятно, очень просто, но это действительно сбивает меня с толку. Когда я реализую IHttpHandler, я создаю обработчик, а затем регистрирую его в файле web.config следующим образом:

IIS6 Portion:
<httpHandlers>
    <add verb="*" path="*.randomextension" type="MyProgramNameSpace.MyHandler" />
</httpHandlers>

IIS7 Portion:
<handlers>
    <add name="mine" verb="*" path="*. randomextension" type ="MyProgramNameSpace.MyHandler" />
</handlers>

Кажется, он работает довольно хорошо и позволяет использовать для него разные обработчики и опции. Это позволяет мне пропускать класс Page и т. д., напрямую обращаясь к конвейеру. Тем не менее, время от времени я продолжаю сталкиваться с документацией, где говорится, что мне нужно использовать что-то о ashx или axd с чем-то.

О чем все это? Как это связано с созданием обработчиков?

Это, вероятно, очень просто, но по какой-то причине я совершенно смущен, когда говорю об этом обработчике ashx или axd.


person danmine    schedule 29.08.2009    source источник


Ответы (3)


Обработчик .asxh — это просто предварительно существующее/предопределенное универсальное сопоставление обработчика. В отличие от обработчика .aspx, вы не ограничены производными от Page и не получаете полный конвейер событий обработчика страниц ASP.NET. Как правило, вы используете файлы .ashx для обработки нестраничных запросов, которые принимают в качестве входных данных или возвращают в качестве вывода нестандартное содержимое.

На самом деле отличия от обработчика .ashx и пользовательского IHttpHandler невелики. Многие конфигурации предопределены для файлов .ashx, но вы привязаны к этому расширению. С полностью настраиваемым IHttpHandler у вас есть полная и полная свобода, но вам нужно настроить его с нуля.

person jrista    schedule 29.08.2009

На самом деле нет никакой разницы. Файлы .ashx реализуют IHttpHandler так же, как и вы. Только .ashx является предварительно зарегистрированным обработчиком, поэтому вам не нужно добавлять его в web.config самостоятельно, это уже сделано за вас.

person olle    schedule 29.08.2009

Если вы решили использовать расширение по типу файла, ваш обработчик подходит.

Если, с другой стороны, вы пытаетесь вернуть данные без определенного расширения, расширение ashx/ahd так же хорошо.

Например, если у вас есть коллекция изображений, хранящихся в базе данных, вы можете зарегистрировать обработчик .JPG, который будет извлекать изображение из базы данных, а не с жесткого диска. Вы также можете создать ASHX, который может возвращать любой тип изображения.

Регистрация расширения может сделать URL-адрес более «нормальным» для конечного пользователя, в то время как ashx выглядит более общим (даже вызывающим).

person Brad Bruce    schedule 29.08.2009