2010-07-06 81 views

回答

0

編輯原始回覆刪除。

我不確定如果存在的文件結果允許您修改內容配置,我相信它會強制「附件」的內容配置。如果你想使用一個不同的配置,我想實現一個自定義操作過濾器:

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

這是一個我以前使用過,因爲我通過實際的byte []文件的數據。

+0

對不起,我的意思是ActionResult(並執行ExecuteResult)而不是ActionFilter。更正的標題。 – DotnetDude 2010-07-06 16:13:47

0

他們基本上會做同樣的事情。建立一個FileContentResult可能是最直接和最容易上手:

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

如果你想保存自己不必指定內容類型(如果你總是要做的PDF),你可以創建一個指定其內容類型(application/pdf)的ActionResult,然後返回該對象而不是FileContentResult(可能類似PdfContentResult)。

但就像我說的,他們會做同樣的事情,不會有任何性能差異。