我无法在.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异常警告,但我也是故意读取的微软出于某种原因。
答案 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了解更多信息。