2009-03-06 8 views
14

Welche Vorteile hat die Verwendung eines Ashx oder Handlers? Brauche ich sie auch, wenn ich MVC verwende (und warum nicht)?Was sind die Vorteile einer ASHX-Handler-Datei in asp.net?

Ist das Framework wichtig (2.0+)?

Warum sollte ich einen Handler verwenden? Ich wurde vor kurzem empfohlen, einen für das Abrufen eines Bildes zu verwenden, aber ich weiß nicht warum.

Vielen Dank für Ihre Zeit.

Bearbeiten - ist ein Handler schneller?

Antwort

17

Nur ein paar Beispiele:

  1. Dynamische Bilderzeugung: Sie können Handler schreiben, die durch die Schaffung eines ASHX Handler Daten angetrieben Bilder zurück, die Bilddaten zurückgibt und dann diese URL in Ihren Stichworte. z.B. <img alt="user's custom icon" src="Icon.ashx?username=bob"></img>

  2. Zurückgeben von REST-basierten XML- oder JSON-Daten an AJAX-Code auf dem Client.

  3. Benutzerdefinierte HTML: Rückkehr völlig benutzerdefinierte HTML für eine Seite, wenn die ASP.NET Web Forms oder MVC-Framework zu restriktiv ist

Ich glaube, das seit 1.0 verfügbar ist

+0

Kann ich nicht # 1 ohne einen Handler tun? Ich habe das jetzt, aber die aspx-Seite schreibt binär. 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: ASPX-Seiten verwenden mehr Ressourcen als ein ASHX-Handler. – Powerlord

+0

Ja, ASPX kann Binär schreiben, aber das ist nicht, was es tun soll. Der Hauptzweck besteht darin, HTML-Inhalt zu rendern. Handler werden speziell für solche Aufgaben verwendet, da Sie keine leere ASPX-Datei definieren und in C#/VB im Code-Behind Code weg programmieren müssen. –

2

Sie sind sehr nützlich, wenn Ihr in einer Umgebung arbeiten, wo Sie wollen aber keinen Zugriff auf IIS haben, Dinge zu ändern, wie weit Zukunft Ablauf Response-Header-Caching für Dateien wie CSS, Bilder,

JavaScript

zu optimieren Für Bilder können Sie Dinge wie On-the-Fly-Optimierung tun, so können Sie Bilder wie image.jpg.ashx? W = 180 & Qualität = 70 anfordern und dann den Handler verwenden, um das Bild basierend auf den Einstellungen in der Querystring übergeben

3

Der Zweck von Handlern in Nicht-MVC-Projekten besteht darin, außerhalb von HTML irgendeine Art von codierter Antwort bereitzustellen. In der Regel würde ein Handler XML (rss, RESTful usw.), JSON für jQuery oder anderes Javascript oder manchmal nur reine Daten wie z. B. binäre Dateidownloads zurückgeben. Ich habe Handler verwendet, um sogar spezielles Javascript zurückzuschicken, das auf dem Client ausgeführt wird, als eine Möglichkeit, große Binärdateien oder Anforderungen nach einem "Nur-Anfrage" -Ansatz zu laden. Mehr oder weniger würde ein Handler verwendet werden, um "alles außer HTML" zurückzugeben.

In MVC würden Sie sich von Handlern entfernen und den Controller verwenden, um beliebige Daten zurückzugeben. So wird in dem Verfahren wie:

mywebsite.com/restapi/content/56223 

Sie RestfulContentController würde ein Verfahren zum Index() hat, die keine Aussicht(), sondern reine XML oder JSON zurückkehren würden.

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

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

aspx erbt Seite welche implementiert IRequireSessionState. Also, wenn Sie es über Ajax aufrufen, dann muss asp.net die Sitzung vor der weiteren Verarbeitung sperren.

Für ashx-Datei ist es zustandslos. Es sei denn, Sie erben es von IRequireSessionState, um den Status zu verwalten.

Verwenden Sie Ashx für alle Ajax-Aufrufe und aspx für rein asp.net-Seite verwenden.