ASP.NET:访问请求InputStream时的异常

时间:2014-12-07 16:33:58

标签: asp.net-mvc telerik

在我的ASP.NET MVC 5应用程序中,我正在尝试访问Request.InputStream属性,但是我得到以下异常:

System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Web.UI.Upload.RequestParser.MergeArrays(Byte[] array1, Byte[] array2)
at Telerik.Web.UI.Upload.RequestParser.get_FirstBoundary()
at Telerik.Web.UI.Upload.RequestParser..ctor(Byte[] boundary, Encoding encoding, RequestStateStore requestStateStore)
at Telerik.Web.UI.Upload.ProgressWorkerRequest.get_Parser()
at Telerik.Web.UI.Upload.ProgressWorkerRequest.UpdateProgress(Byte[] buffer, Int32 validBytes
at Telerik.Web.UI.Upload.ProgressWorkerRequest.GetPreloadedEntityBody()
at System.Web.HttpRequest.GetEntireRawContent()
at System.Web.HttpRequest.get_InputStream()

如您所见,Telerik组件抛出异常。我确实在我的项目中使用Telerik Web控件,但它们都与此控制器无关。即使我使用工具生成请求,也会发生异常。在我看来,Telerik以某种方式将这个ProgressWorkerRequest对象注入我的HttpRequest。

有关如何摆脱它的任何线索?

1 个答案:

答案 0 :(得分:0)

它不必与您的控制器相关。它与Telerik上传者正在进行的过程有关,而不是“摆脱”#34;。基本上,它告诉你Telerik上传程序没有完成,因为它没有找到它所期望的内容。

由于Telerik控件通常很容易使用,因此您只需要这样的东西来获取文件的输入流:

public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> fileUploader)
{
    if (Request.Files.Count == 1)
    {
        string fileName = Request.Files[0].FileName;
        Stream s = Request.Files[0].InputStream;
        int size = Request.Files[0].ContentLength; 
        byte[] myFile = new byte[length];
        s.Read(myFile, 0, size);
        // Now, myFile should have the file, in bytes
    }
}

如果您没有收到该文件,我会确保该应用程序通过您所指向的资源所处的帐户(您的帐户或服务帐户,如果是Web应用程序)具有权限。