2017-10-15 51 views
0

我無法獲得以下代碼在.net core 1.1中激發。它從服務器導出SSRS報告,並返回FileResult類型。我將轉換爲FileContentResult,然後轉換爲內存流然後轉換爲bytearray。該文件被生成,但response.content只有頭部包含正確設置的內容長度頭部,但不包含字節數組內容本身。這總是空的。內容正在使用axios從Vue.JS應用程序的.net核心中檢索。FileContentResult寫入HttpResponseMessage.Content

[HttpPost, Route("GetDailyInstitution")] 
    public HttpResponseMessage GetDailyInstitution([FromBody] 
    ReportViewModels.DailyReportInst mydata) 
    { 

    HttpResponseMessage response = new HttpResponseMessage();  
    var model = this.GetReportViewerModel(Request); 
    var mdate = mydata.mydate; 
    model.ReportPath = "/xxxxx/xxxx/xxxx"; 
    model.AddParameter("InstitutionID", 
    mydata.InstitutionID.ToString()); 
    model.AddParameter("DayDate", mdate.ToString("dd/MM/yyyy")); 
    model.ViewMode = AlanJuden.MvcReportViewer.ReportViewModes.Export; 
    byte[] bytes; 
    MemoryStream mstream = new MemoryStream(); 
    FileResult myfile = null;  
    FileContentResult myfilecontent = null; 
    switch (mydata.mytype) 
    { 
     case "pdfMe": 
     myfile = ExportReport("xxxxxx/xxxxxxxx/xxxx", "PDF"); 
     myfilecontent = (FileContentResult)myfile; 
     bytes = myfilecontent.FileContents; 
     mstream.Write(bytes, 0, bytes.Length); 
     response.Content = new ByteArrayContent(mstream.ToArray()); 
     response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf"); 
     break; 
    } 

    return response; 
    } 

我想這個問題是在它設置response.content或可能ms.toarray()調用,因爲它確實會導致一個readcount和writecount異常警告該地區,但我也看到了這是由於某種原因,微軟有意爲之。

+0

您可以將代碼放入其實際的方法和控制器中。那麼可以更好地理解。 –

+1

感謝您的評論。其實我今晚就解決了這個問題。我會在第二時間發佈答案。但你說得對,我會添加額外的代碼。 – Morgan

回答

0

經過更多調查後,問題與它是.net核心項目的事實有關。 HttpResponseMessage作爲舊版api規範的一部分在.net內核中被棄用,儘管它仍然可以被稱爲引用System.Net.Http命名空間。響應將運行,但它將無法正確序列化bytearray,並且不會存儲response.content,僅存儲標頭。

有一個修復程序,涉及添加一些web api功能的兼容性。

如果您在通過HttpResponseMessage請求memorystream/bytearrays時在.net核心Web應用程序中獲取奇數xml響應而不是實際內容,則需要安裝microsoft.aspnetcore.mvc.webapicompatshim引用,然後添加services.mvc。將addwebapiconventions()添加到startup.cs文件的configureservices部分。其他的都可以保持不變。

see here欲瞭解更多信息。

相關問題