2010-07-06 2 views

Répondre

0

EDIT Réponse originale supprimée.

Je ne suis pas sûr si le résultat du fichier existant vous permet de modifier la disposition du contenu, je crois qu'il force la disposition du contenu de "pièce jointe". Si vous souhaitez utiliser une disposition différente, je base de filtre d'action personnalisé:

/// <summary> 
/// Defines an <see cref="ActionResult" /> that allows the output of an inline file. 
/// </summary> 
public class InlineFileResult : FileContentResult 
{ 
    #region Constructors 
    /// <summary> 
    /// Writes the binary content as an inline file. 
    /// </summary> 
    /// <param name="data">The data to be written to the output stream.</param> 
    /// <param name="contentType">The content type of the data.</param> 
    /// <param name="fileName">The filename of the inline file.</param> 
    public InlineFileResult(byte[] data, string contentType, string fileName) 
     : base(data, contentType) 
    { 
     FileDownloadName = fileName; 
    } 
    #endregion 

    #region Methods 
    /// <summary> 
    /// Executes the result, by writing the contents of the file to the output stream. 
    /// </summary> 
    /// <param name="context">The context of the controller.</param> 
    public override void ExecuteResult(ControllerContext context) 
    { 
     if (context == null) { 
      throw new ArgumentNullException("context"); 
     } 

     HttpResponseBase response = context.HttpContext.Response; 
     response.ContentType = this.ContentType; 
     if (!string.IsNullOrEmpty(this.FileDownloadName)) { 
      ContentDisposition disposition = new ContentDisposition(); 
      disposition.FileName = FileDownloadName; 
      disposition.Inline = true; 
      context.HttpContext.Response.AddHeader("Content-Disposition", disposition.ToString()); 
     } 

     WriteFile(response); 
    } 
    #endregion 
} 

C'est celui que je l'ai utilisé précédemment, parce que je passe l'octet réel [] données du fichier.

+0

Désolé, je voulais dire ActionResult (et l'implémentation de ExecuteResult) et non ActionFilter. Titre corrigé – DotnetDude

0

Ils feraient essentiellement la même chose. La mise en place d'un FileContentResult est probablement la plus droite vers l'avant et le plus facile pour commencer avec:

public FileContentResult GetPdf() 
{ 
    return File(/* byte array contents */, "application/pdf"); 
} 

Si vous voulez vous éviter d'avoir à spécifier le type de contenu (si vous allez toujours faire PDF), vous pourrait créer un ActionResult qui a spécifié le type de contenu (application/pdf) à l'intérieur de celui-ci, et le retourner au lieu du FileContentResult (peut-être quelque chose comme PdfContentResult). Mais comme je l'ai dit, ils feront la même chose et il n'y aura pas de différence de performance.

Questions connexes