FileContentResult写入HttpResponseMessage.Content

时间:2017-10-15 08:09:05

标签: c# reporting-services asp.net-core memorystream

我无法在.net核心1.1中获取以下代码。它从服务器导出SSRS报告,并返回FileResult类型。我正在转换为FileContentResult,然后转换为内存流,然后转换为bytearray。生成文件,但response.content只有包含正确设置的内容长度标题的标题,而不是bytearray内容本身。这总是空的。正在使用Axios从Vue.JS应用程序检索内容。

    [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异常警告,但我也是故意读取的微软出于某种原因。

1 个答案:

答案 0 :(得分:0)

经过更多调查后,问题与它是一个.net核心项目有关。 HttpResponseMessage已经在.net核心中被弃用,作为旧的web api规范的一部分,尽管它仍然可以被称为引用System.Net.Http命名空间。响应将运行,但它将无法正确序列化bytearray并且不会存储response.content,只会存储标题。

有一项修复涉及为某些web api功能添加兼容性。

如果您在通过HttpResponseMessage请求内存流/字节数组时在.net核心Web应用程序中获得奇怪的xml响应而不是实际正文内容,则需要安装microsoft.aspnetcore.mvc.webapicompatshim引用然后添加services.mvc.addwebapiconventions ()到startup.cs文件的configureservices部分。其他一切都可以保持不变。

see here了解更多信息。