当用户尝试从我的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

关于c# - 如何解决:对象必须是原始数组。参数名称:src,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9802789/

10-12 12:19
查看更多