要将pdf文件(或任何其他文件类型)发送到浏览器,我见过使用FileResult
类或自定义操作结果的示例。
使用一个优于另一个有优势吗?感谢
答案 0 :(得分:0)
编辑原始回复已删除。
我不确定存在的文件结果是否允许您修改内容处置,我相信它会强制“附件”的内容处理。如果你想使用不同的处置方式,我会实现一个自定义的Action Filter:
/// <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 []数据。
答案 1 :(得分:0)
他们基本上会做同样的事情。设置FileContentResult
可能是最直接且最容易上手的:
public FileContentResult GetPdf()
{
return File(/* byte array contents */, "application/pdf");
}
如果您不想指定内容类型(如果您总是要执行PDF),则可以创建指定内容类型(ActionResult
)的application/pdf
。它,并返回而不是FileContentResult
(可能像PdfContentResult
)。
但就像我说的那样,他们会做同样的事情而且不会有任何性能差异。