Hallo Leute,
ich habe jetzt das Problem mit dem HttpHandler teilweise gelöst.
Mein Problem war es ja, dass ich nicht genau wusste wo und wie ich den Handler aufrufen sollte.
Ich habe es jetzt so realisiert, dass ich auf der Inhaltsseite meiner Masterpage ein RegisterStartupScript in einer Methode ausführe, wenn die Bedingung erfüllt ist, dass es sich um ein PDF- oder Office-Dokument handelt.
Das ganze sieht dann so aus:
ClientScript.RegisterStartupScript(Me.GetType(), "Download", "<script src=/_images/_tmp/" + tempFile + "></script>")Meinen Handler habe ich so realisiert, das ich eine Klasse im Ordner App_Code erstellt habe, die die Klasse IHttpHandler implementiert.
Diese sieht folgendermaßen aus:
Imports System.IO
Imports System.Web
Public Class DownloadHandler
Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
Dim request As HttpRequest = context.Request
Dim response As HttpResponse = context.Response
Dim FilePath As String = request.PhysicalPath
response.ClearContent()
response.ClearHeaders()
'response.Clear()
If Not String.IsNullOrEmpty(FilePath) Then
Dim fi As FileInfo = New FileInfo(FilePath)
If fi.Exists Then
Dim fiExtension As String = fi.Extension.LastIndexOf(".") + 1
'response.ContentType = String.Format("application/{0}", fiExtension)
response.ContentType = "application/octetstream"
response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", fi.Name))
response.WriteFile(fi.ToString)
'response.Close()
End If
End If
'response.End()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End ClassIn der web.config ist das ganze dann so registriert:
<httpHandlers>
<add verb="GET" path="*.doc" type="DownloadHandler"/>
<add verb="GET" path="*.xls" type="DownloadHandler"/>
<add verb="GET" path="*.pdf" type="DownloadHandler"/>
</httpHandlers>Wenn ich jetzt meine Anwendung ausführe und ein PDF- oder Office-Dokument anfordere, wird der Handler korrekt aufgerufen, so wie ich mir das vorgestellt habe. Jetzt habe ich aber das umgekehrte Problem, wie ich es am Anfang hatte (im ersten Beitrag beschrieben), nämlich, dass meine Anforderungen korrekt in der Seite verarbeitet werden, jedoch der Öffnen-Dialog nicht erscheint bzw. es zu Fehlern kommt.
Bei PDF-Dokumenten kommt es zu einem Syntaxfehler (%PDF-1.3\n) und bei Office-Dokumenten werden ungültige Zeichen dargestellt, wenn oben aufgeführter Code im Handler ausgeführt wird. Wenn ich jedoch die auskommentierten Zeilen mit reinnehme, passiert gar nix.
Ich denke Peter, hat dieses Problem in seinem Artikel
http://www.aspnetzone.de/blogs/peterbucher/archive/2007/11/20/daten-mit-asp-net-zum-client-schicken-oder-wieso-eigentlich-httphandler.aspx unter "
Wieso sollte eine Datei oder ein Bild nicht per ASPX Seite
versendet werden? " schon beschrieben. Leider helfen mir aber dort beschriebene Lösungsvorschläge nicht weiter.
Wo könnte der Fehler bei mir liegen? Über weitere Lösungsvorschläge wäre ich wirklich dankbar.
Gruß NoGo