2017-12-09 4 views
0

.Net 4.6.1 C#Geöffnete PDF-Datei in neuer Registerkarte öffnen statt herunterladen..Web API

Ich erzeuge eine PDF-Datei zur Laufzeit und kann sie erfolgreich herunterladen. Ich möchte die neu erstellte PDF-Datei in einem neuen Tab öffnen, anstatt sie herunterzuladen. Hier ist mein Code (Web API 2.1 Methode):

public HttpResponseMessage ToPDF(string cn) 
    { 

     var stream = new MemoryStream(); 
      stream = GeneratePDF(); 


     var result = new HttpResponseMessage(HttpStatusCode.OK) 
     { 
      Content = new ByteArrayContent(stream.ToArray()) 
     }; 
     result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") 
     { 
      FileName = "file.pdf" 
     }; 
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 


     return result; 


    } 

Ich dachte, das würde funktionieren, aber es nicht. Ich habe target = "_ blank" auch auf meinem Anker-Tag. Wie öffne ich meine neu erstellte PDF-Datei in einem neuen Tab anstelle des Browsers, der es auf die Festplatte des Benutzers herunterladen möchte? Danke

+1

Sie müssen die Inhaltsdisposition von Anlage zu Inline ändern (übrigens gibt es eine Konstante für diese 'System.Net.Mime.DispositionTypeNames.Inline'). Siehe http://www.iana.org/assignments/cont-disp/cont-disp.xhtml – ckuri

+0

@ckuri - das war es. Bitte posten Sie als Antwort, damit ich Ihnen einen angemessenen Kredit geben kann. Danke – BoundForGlory

+0

Wie Sie vorgeschlagen haben, habe ich es als Antwort gepostet. – ckuri

Antwort

1

Abgesehen von David Mkheyan Vorschlag von dem richtigen MIME-Typ einstellen, müssen Sie auch von attachment zu inline den Inhalt Disposition ändern.

result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue(System.Net.Mime.DispositionTypeNames.Inline) 
    { 
     FileName = "file.pdf" 
    }; 

Nach https://www.iana.org/assignments/cont-disp/cont-disp.xhtmlattachment bedeutet "benutzergesteuerten Display" und inline wird "automatisch angezeigt".

+0

genial job kumpel! – BoundForGlory

0

Ändern Sie einfach den Medientyp von Anwendung/Oktettstream zu Anwendung/pdf. Es sollte funktionieren.Ich denke, Sie können auch den Rückgabetyp zu FileResult anstelle von HttpResponseMessage ändern. result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

+1

danke für die antwort, aber es will immer noch das pdf herunterladen und nicht in einem neuen tab öffnen – BoundForGlory

Verwandte Themen