Каковы преимущества файла обработчика ASHX в asp.net?

Каковы преимущества использования ashx или хендлера? Кроме того, нужны ли они мне, если я использую MVC (а почему бы и нет)?

Имеет ли значение фреймворк (2.0+)?

Зачем мне использовать обработчик? Мне недавно порекомендовали использовать его для получения изображения, но я не знаю почему.

Спасибо за уделенное время.

Edit - обработчик быстрее?


person johnny    schedule 06.03.2009    source источник


Ответы (4)


Всего несколько примеров:

  1. Генерация динамических изображений: вы можете написать обработчики, которые возвращают изображения, управляемые данными, создав обработчик ASHX, который возвращает данные изображения, а затем используя этот URL-адрес в ваших тегах. например <img alt="user's custom icon" src="Icon.ashx?username=bob"></img>

  2. Возврат данных XML или JSON на основе REST в код AJAX на клиенте.

  3. Пользовательский HTML: возвращает полностью настраиваемый HTML-код для страницы, если веб-формы ASP.NET или платформа MVC слишком строгие.

Я считаю, что это было доступно с 1.0

person Mike Marshall    schedule 06.03.2009
comment
Разве я не могу сделать №1 без хендлера? У меня есть это сейчас, но страница aspx выполняет двоичную запись. stackoverflow.com/questions/612342/ - person johnny; 06.03.2009
comment
@johnny: страницы ASPX используют больше ресурсов, чем обработчик ASHX. - person Powerlord; 06.03.2009
comment
Да, aspx может выполнять двоичную запись, но это не то, что он должен делать. Основная цель - отображать HTML-контент. Обработчики специально используются для таких задач, потому что вам не нужно определять пустой файл aspx и код в C # / VB в коде программной части. - person Chetan S; 06.03.2009
comment
Да, вы можете сделать №1 без хендлера. Фактически, вы можете делать все без обработчика и просто использовать ASPX-страницу для всего. Но цель обработчиков - идентифицировать отделение представления Html от «некоторого другого типа данных». Следовательно, мой ответ я опубликовал отдельно. - person eduncan911; 06.03.2009
comment
да, но гораздо меньше накладных расходов для ASHX. На странице ASPX вы без необходимости выполняете все элементы конвейерной линии ASP.NET (состояние просмотра, дерево управления и т. Д.), Которые вы никогда не будете использовать. - person Mike Marshall; 06.03.2009

Назначение обработчиков в проектах, не относящихся к MVC, - предоставить некоторый тип закодированного ответа вне HTML. Обычно обработчик возвращает XML (rss, RESTful и т. Д.), JSON для jQuery или другого Javascript, а иногда просто чистые данные, такие как загрузки двоичных файлов. Я использовал обработчики, чтобы даже возвращать специальный javascript, который будет выполняться на клиенте, как способ отложенной загрузки большого двоичного файла или требований при подходе «только по запросу». Более или менее, обработчик будет использоваться для возврата «чего угодно, кроме HTML».

В MVC вы бы отказались от обработчиков и использовали Контроллер для возврата любых данных, которые вам нравятся. Итак, в методе вроде:

mywebsite.com/restapi/content/56223

У вас, RestfulContentController, будет метод для Index (), который НЕ будет возвращать View (), а вместо этого будет чистый XML или JSON.

public class JSONContentController : Controller
{
  public JsonResult Index(int ContentID)
  {
    // get Content() by ContentID
    //

    // return a JSON version
    return Content().SerializeToJSON();
  }
}
person eduncan911    schedule 06.03.2009

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

Для изображений вы можете делать такие вещи, как оптимизация на лету, чтобы вы могли запрашивать изображения, такие как image.jpg.ashx? W = 180 & quality = 70, а затем использовать обработчик для доставки изображения на основе настроек, переданных в строке запроса.

person Nick Allen    schedule 06.03.2009

aspx наследует страницу, которая реализует IRequireSessionState. Поэтому, если вы вызываете его через Ajax, тогда asp.net необходимо заблокировать сеанс перед дальнейшей обработкой.

Для файла ashx он не имеет состояния. Если вы не унаследовали его от IRequireSessionState для управления состоянием.

Используйте ashx для всех вызовов Ajax и используйте aspx только для страницы asp.net.

person Pradeep    schedule 11.03.2014