2010-02-25 16 views

Antwort

5

Generische Handler sind die .NET-Komponenten, die die System.Web.IHttpHandler-Schnittstelle implementieren. Jede Klasse, die die IHttpHandler-Schnittstelle implementiert, kann als Ziel für die eingehenden HTTP-Anforderungen fungieren. Page ist auch ein generischer Handler. Im Allgemeinen haben generische Handler eine Erweiterung von ASHX.

Sie können zB here

2

Einige ASP.NET-Dateien dynamisch erzeugt werden. Sie werden mit C# -Code- oder Datenträgerressourcen generiert. Diese Dateien benötigen keine Webformulare. Stattdessen ist ein generischer ASHX-Handler ideal. Es kann ein Bild dynamisch aus einer Abfragezeichenfolge zurückgeben, XML oder andere Daten schreiben.

1

Ashx File ist nichts anderes als eine ASPX-Seite. Sie entsprechen benutzerdefinierten Handlern, die in C Sharp oder Visual Basic.NET geschrieben wurden, da sie Klassen enthalten, die IHttpHandler vollständig implementieren. Sie sind bequem auf die gleiche Weise wie ASPX-Dateien bequem sind. Sie surfen einfach zu ihnen und sie werden automatisch kompiliert.

Wenn WebForms (aspx) zu

einfache HTML-Seiten
Asp.net Benutzerdefinierte Steuerelemente
Einfache Dyanamic Seiten

verwendet werden, wenn Handlers (Ashx) zu

Binär-Dateien verwendet werden
Dynamische Bildansichten
Leistung kritische Webseiten
XML-Dateien
Minimale Webseiten

0

ASHX Generic Handler ist ein Konzept zur Rückgabe dynamischer Inhalte. Es wird verwendet, um AJAX-Aufrufe, ein Bild aus einer Abfragezeichenfolge, XML-Daten oder andere Daten zurückzugeben. Ich habe es verwendet, um MP4-Datei aus Abfragezeichenfolge zurückzugeben. Bitte finden Sie den folgenden Code.

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; 
     } 
    } 
} 
} 

Hier habe ich FileCS.ashx Datei erstellt. Wo erben ich IHttpHandler-Schnittstelle. und schrieb die Funktion ProcessRequest (HttpContext context), die beim Aufruf der Datei standardmäßig ausgeführt wird. Und context.Request.QueryString [] ruft den Parameter ab. Hier überlasse ich id als Parameter. IsReusable() Funktion kann für eine gute Leistung verwendet werden.

Verwandte Themen