2010-02-25 48 views

Respuesta

5

Los controladores genéricos son los componentes .NET que implementan la interfaz System.Web.IHttpHandler. Cualquier clase que implemente la interfaz IHttpHandler puede actuar como un destino para las solicitudes HTTP entrantes. Page es también controlador genérico. En general, los manipuladores genéricos tienen una extensión de ASHX.

puede encontrar ejemplo here

2

Algunos archivos de ASP.NET se generan de forma dinámica. Se generan con código C o recursos de disco. Estos archivos no requieren formularios web. En cambio, un controlador genérico ASHX es ideal. Puede devolver dinámicamente una imagen desde una cadena de consulta, escribir XML o cualquier otro dato.

1

Ashx File no es más que una página aspx. Son equivalentes a los controladores personalizados escritos en C Sharp o Visual Basic.NET porque contienen clases que implementan completamente IHttpHandler. Son convenientes de la misma manera que los archivos ASPX son convenientes. Simplemente navega hacia ellos y se compilan automáticamente.

Cuando Web Forms (.aspx) a utilizar

simple páginas HTML
Asp.net controles personalizados
simple Dyanamic Páginas

Cuando los manipuladores (ASHX) a utilizar

archivos binarios
Vistas de la imagen dinámica
Páginas web críticas de rendimiento
archivos xml
Páginas web mínimas

0

ASHX Generic Handler es un concepto para devolver contenido dinámico. Se usa para devolver llamadas ajax, imágenes de una cadena de consulta, escribir XML o cualquier otro dato. Lo he usado para devolver el archivo MP4 de la cadena de consulta. Por favor encuentra el siguiente código

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
namespace ESPB.CRM.Web.UI.VideoUploading 
{ 

public class FileCS : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     int id = int.Parse(context.Request.QueryString["id"]); 
     byte[] bytes; 
     string contentType; 
     string strConnString = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString; 
     string name; 
     using (SqlConnection con = new SqlConnection(strConnString)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "select Name, Data, ContentType from VideoUpload where [email protected]"; 
       cmd.Parameters.AddWithValue("@Id", id); 
       cmd.Connection = con; 
       con.Open(); 
       SqlDataReader sdr = cmd.ExecuteReader(); 
       sdr.Read(); 
       bytes = (byte[])sdr["Data"]; 
       contentType = sdr["ContentType"].ToString(); 
       name = sdr["Name"].ToString(); 
       con.Close(); 
      } 
     } 
     context.Response.Clear(); 
     context.Response.Buffer = true; 
     context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name); 
     context.Response.ContentType = contentType; 
     context.Response.BinaryWrite(bytes); 
     context.Response.End(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
} 

Aquí he creado FileCS.ashx archivo. Donde heredo la interfaz IHttpHandler. y escribió la función ProcessRequest (contexto HttpContext), que se ejecutará de forma predeterminada mientras se llama al archivo. Y context.Request.QueryString [] obtendrá el parámetro. Aquí estoy pasando id como parámetro. La función IsReusable() se puede usar para un buen rendimiento.

Cuestiones relacionadas