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

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

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

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

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

Изменить - это обработчик быстрее?

Ответ 1

Несколько примеров:

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

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

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

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

Ответ 2

Цель обработчиков в проектах, отличных от 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();
  }
}

Ответ 3

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

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

Ответ 4

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

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

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