如何修复:对象必须是基元数组.参数名称:src
本文关键字:参数 数组 src 对象 何修复 | 更新日期: 2023-09-27 18:28:24
当用户试图从我的web应用程序下载pdf时,我收到了大量报告的错误:
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");
但这似乎并不能解决问题。
任何想法都值得赞赏。。。
问题是由.Net框架本身引起的。似乎存在一个常见问题,即StaticFileHandler对Buffer.BlockCopy的调用无法正确处理PDF文件。我在其他地方找到的唯一解决方案是编写自己的文件处理程序,它不使用Buffer.BlockCopy.
这里有一个链接,指向http处理程序的实现,以修复这种确切的情况:http://forums.asp.net/t/1471292.aspx/1
您也可以按照Microsoft的指南创建http处理程序,并将示例调整为特定于PDF文件:http://msdn.microsoft.com/en-us/library/ms972953.aspx