2012-03-21 873 views
2

我得到这些错误报道的负载,当用户试图从我的web应用程序下载PDF:如何解决:对象必须是一个基元数组。参数名:SRC

System.ArgumentException: Object must be an array of primitives. 
Parameter name: src 
at System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count) 
at System.Web.StaticFileHandler.ProcessRangeRequest(HttpContext context, String physicalPath, Int64 fileLength, String rangeHeader, String etag, DateTime lastModified) 
at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

我已经看了一眼http://support.microsoft.com/kb/2026272,并试图点3(在这种情况下,其他建议并不是真正可行的解决方案),但它不能解决问题。

我看到其他地方的另一个建议是下面添加到Global.asax的Application_PostRequestHandlerExecute方法:

HttpApplication app = (HttpApplication)sender; 

if(app.Context.Request.RawUrl.Contains(".pdf")) 
    app.Response.AppendHeader("Accept-Ranges", "none"); 

,但这又似乎并不解决问题。

任何想法赞赏...

+2

发布导致异常的代码。 – Oded 2012-03-21 10:37:54

+0

我编辑了我的问题以包含完整的堆栈跟踪。当用户尝试下载PDF时,会发生这种情况......一个直接的HTTP请求,没有其他事情在幕后发生。 – user806982 2012-03-21 11:15:42

回答

1

问题是由.NET Framework本身引起的。看起来,StaticFileHandler对Buffer.BlockCopy的调用没有正确处理PDF文件时存在一个常见问题。我在其他地方找到的唯一解决方案以及可以想到的自己,就是编写自己的文件处理程序,它不使用Buffer.BlockCopy。

这里是一个链接到一个HTTP处理程序的实现来解决这个确切情况: http://forums.asp.net/t/1471292.aspx/1

您也可以按照微软的指导创建HTTP处理程序,并调整样品具体到PDF文件: http://msdn.microsoft.com/en-us/library/ms972953.aspx

相关问题