2014-12-07 93 views
0

在我的ASP.NET MVC應用5,當我試圖訪問Request.InputStream財產,但我得到以下異常:ASP.NET:異常訪問請求的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中。

任何關於如何擺脫它的線索?

+0

您應該包含您用於上傳文件的控制器代碼,或者您正在執行的任何訪問'Request.InputStream'的方法。 – vapcguy 2015-03-11 22:34:10

回答

0

它不必與您的控制器相關。這與Telerik上傳器正在進行的過程有關,並不是「擺脫」的東西。基本上,它告訴你Telerik uploader進程沒有完成,因爲它沒有找到它期望的內容。

由於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應用程序)將權限授予您指向的資源。