2017-10-15 1 views
0

.net core 1.1で起動する次のコードを取得できません。サーバーからSSRSレポートをエクスポートし、FileResult型を返します。私はFileContentResultに変換してからmemorystreamに、次にbytearrayに変換します。ファイルは生成されますが、response.contentは正しく設定されたコンテンツ長ヘッダーを含むヘッダーしか持ちませんが、bytearrayコンテンツ自体は含まれません。これは常に空です。コンテンツは、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; 
    } 

私はこの問題を考えているが、それはreadcountとwritecount例外警告を与えていないとして、それはresponse.contentまたは多分ms.toarray()の呼び出しを設定し、エリア内にあるが、私も読みましたそれは何らかの理由でMicrosoftによって意図的に行われたものです。

+0

実際のメソッドとコントローラの内部にコードを配置できますか?その後、それはよりよく理解できた。 –

+1

コメントありがとうございます。実際に私は今夜これを解決しました。私は答えを1秒後に投稿します。しかし、あなたは正しいです、私は余分なコードを追加します。 – Morgan

答えて

0

さらに調査したところ、この問題は.netコアプロジェクトであるという事実と関連していました。 HttpResponseMessageはSystem.Net.Http名前空間を参照して呼び出すことはできますが、古いWeb API仕様の一部として.netコアで非推奨になりました。応答は実行されますが、bytearrayを正しくシリアル化できず、response.contentは格納されず、ヘッダーのみが格納されます。

いくつかのWeb API機能に互換性を追加する修正があります。

HttpResponseMessage経由のMem​​oryStream/ByteArrayとして定義を要求するときに、あなたが代わりに.NETのコアWebアプリケーションの実際のボディコンテンツの奇数XMLレスポンスを取得している場合は、その後、services.mvcを追加microsoft.aspnetcore.mvc.webapicompatshim参照をインストールする必要があります。 startup.csファイルのconfigureservicesセクションにaddwebapiconventions()を追加します。他はすべて同じままです。

see here詳細については、

関連する問題