FilePathResult使用大文件抛出OutOfMemoryException

我在我的控制器中有这个Action,它将一个文件返回给用户。

public virtual ActionResult ReturnFile(string fileName, string filePath, string contentType) { var cd = new System.Net.Mime.ContentDisposition { FileName = fileName, // always prompt the user for downloading, set to true if you want // the browser to try to show the file inline Inline = false, }; // set token for close the modal-window CookiesHelper.SetValueDownloadTokenInCookie(); Response.AppendHeader("Content-Disposition", cd.ToString()); return File(filePath, contentType); } 

它工作正常,但问题是,当文件很大( OutOfMemoryException 220 Mb)时,它会抛出一个OutOfMemoryException

这是堆栈跟踪

 [OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.] System.IO.MemoryStream.set_Capacity(Int32 value) +93 System.IO.MemoryStream.EnsureCapacity(Int32 value) +64 System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) +330 Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter.Write(Byte[] buffer, Int32 offset, Int32 count) +106 System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +9509748 System.Web.HttpResponse.FilterOutput() +104 System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +49 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69 

有任何想法吗?

这是因为您的请求正在使用PageInspector如堆栈跟踪的这一行所示:

Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter.Write(Byte [] buffer,Int32 offset,Int32 count)+106

要解决此问题,请取消选中Visual Studio的浏览器复选框,如以下屏幕截图所示:

取消选中浏览器链接

我认为您可以通过在Web.config文件中设置maxQueryString来解决问题。 如果您尚未进行设置,请查看以下代码:

         

您可以根据需要设置最大值。