Каковы преимущества файла обработчика ASHX в asp.net? - PullRequest
14 голосов
/ 06 марта 2009

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

Имеет ли значение каркас (2.0 +)?

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

Спасибо за ваше время.

Редактировать - обработчик быстрее?

Ответы [ 4 ]

17 голосов
/ 06 марта 2009

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

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

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

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

Я полагаю, это доступно с 1.0

3 голосов
/ 06 марта 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();
  }
}
2 голосов
/ 06 марта 2009

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

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

0 голосов
/ 12 марта 2014

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

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

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

...