2009-03-06 49 views
14

¿Cuáles son los beneficios de usar un ashx o manipulador? Además, ¿los necesito si utilizo MVC (y por qué no)?¿Cuáles son los beneficios de un archivo ASHX handler en asp.net?

¿Importa el marco (2.0+)?

¿Por qué querría utilizar un controlador? Hace poco me recomendaron usar uno para recuperar una imagen, pero no sé por qué.

Gracias por su tiempo.

Editar - ¿es un manejador más rápido?

Respuesta

17

sólo algunos ejemplos:

  1. generación de imágenes dinámico: Puede escribir controladores que devuelven datos de imágenes impulsado creando un gestor de ASHX que devuelve datos de la imagen y luego utilizar esa URL en su etiquetas. p.ej. <img alt="user's custom icon" src="Icon.ashx?username=bob"></img>

  2. Devolviendo datos XML o JSON basados ​​en REST al código AJAX en el cliente.

  3. HTML personalizado: Retorno HTML totalmente personalizada para una página cuando los formularios web ASP.NET MVC o marco es demasiado restrictiva

Creo que esto ha estado disponible desde 1,0

+0

¿Puedo hacer # 1 sin un controlador? Lo tengo ahora, pero la página aspx tiene escritura binaria. http://stackoverflow.com/questions/612342/whats-the-best-way-to-display-an-image-from-a-sql-server-database-in-asp-net/612360#612360 – johnny

+4

@ johnny: las páginas ASPX usan más recursos que un manejador ASHX. – Powerlord

+0

Sí, aspx puede escribir de forma binaria pero eso no es lo que se supone que debe hacer. El objetivo principal es generar contenido HTML. Los manipuladores se usan específicamente para tales tareas porque no necesita definir un archivo aspx vacío y codificarlo en C#/VB en código subyacente. –

2

Son muy útiles si su trabajo en un entorno en el que no tiene acceso a IIS, pero desea cambiar cosas como futuro lejano cabeceras de respuesta de caducidad para optimizar el almacenamiento en caché de archivos como imágenes, CSS, JavaScript

Para las imágenes puede hacer cosas como la optimización sobre la marcha para que pueda solicitar imágenes como image.jpg.ashx? W = 180 & quality = 70 y luego use el controlador para entregar la imagen según la configuración aprobada en la cadena de consulta

3

El propósito de los controladores en proyectos que no son MVC es proporcionar algún tipo de respuesta codificada, fuera de HTML. Típicamente, un manejador devolvería XML (rss, RESTful, etc), JSON para jQuery u otro Javascript, o algunas veces solo datos puros como descargas binarias de archivos. Utilicé manejadores para incluso devolver javascript especiales para ser ejecutados en el cliente, como una forma de carga lenta de grandes requisitos o binarios en un enfoque de "solo demanda". Más o menos, un controlador se usaría para devolver "cualquier cosa menos HTML".

En MVC, se alejaría de los manipuladores y utilizaría el controlador para devolver los datos que desee. Por lo tanto, en el método como:

mywebsite.com/restapi/content/56223 

Usted RestfulContentController tendría un método para el índice(), que no regresaría a View(), pero en lugar de XML o JSON pura.

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

    // return a JSON version 
    return Content().SerializeToJSON(); 
    } 
} 
0

aspx hereda página que implementa IRequireSessionState. Entonces, si lo llamas a través de Ajax, entonces asp.net necesita bloquear la sesión antes de continuar con el procesamiento.

Para el archivo ashx no tiene estado. A menos que lo herede de IRequireSessionState para administrar el estado.

Use ashx para todas las llamadas Ajax y use aspx para la página puramente asp.net.

Cuestiones relacionadas