2017-10-15 5 views
0

.net core 1.1에서 다음 코드를 실행할 수 없습니다. 서버에서 SSRS 보고서를 내보내고 FileResult 형식을 반환합니다. FileContentResult로 변환하고 나서 memorystream으로 변환 한 다음 bytearray로 변환합니다. 파일이 생성되었지만 response.content에는 올바르게 설정된 Content Length 헤더를 포함하는 헤더 만 포함되지만 bytearray 컨텐트 자체는 포함되지 않습니다. 이것은 항상 비어 있습니다. 콘텐츠는 Vue.JS 앱의 .net 코어에 axios를 사용하여 검색됩니다. 내가 문제를 생각하고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 예외 경고를 유발로 전화를 설정하는 영역에 있지만 나는 또한 읽었습니다 이는 Microsoft가 의도적으로하는 이유입니다.

+0

코드를 실제 메소드와 컨트롤러 안에 넣을 수 있습니까? 그러면 더 잘 이해할 수 있습니다. –

+1

의견을 보내 주셔서 감사합니다. 사실 나는 오늘 밤이 문제를 해결했습니다. 나는 잠시 후에 대답을 올릴 것이다. 하지만 네 말이 맞아, 나는 여분의 코드를 추가 할 것이다. – Morgan

답변

0

더 많은 조사가 끝난 후 문제는 그것이 .net 핵심 프로젝트라는 사실과 관련이 있습니다. HttpResponseMessage는 System.Net.Http 네임 스페이스를 참조하여 호출 할 수는 있지만 이전 웹 API 사양의 일부로 .net 코어에서 더 이상 사용되지 않습니다. 응답은 실행되지만 bytearray를 올바르게 serialize하지 못하고 response.content를 저장하지 않고 헤더 만 저장합니다.

일부 웹 API 기능에 호환성을 추가하는 수정 프로그램이 있습니다.

HttpResponseMessage를 통해 memorystream/bytearrays를 요청할 때 .net 핵심 웹 응용 프로그램에서 실제 본문 내용 대신 이상한 xml 응답이 표시되는 경우 microsoft.aspnetcore.mvc.webapicompatshim 참조를 설치 한 다음 services.mvc를 추가해야합니다. startup.cs 파일의 configureservices 섹션에 addwebapiconventions()를 추가하십시오. 다른 모든 것은 동일하게 유지 될 수 있습니다.

see here 자세한 내용은

관련 문제