2017-04-04 23 views
0

私はPDFを返すべきWeb APIサービスを持っています。
次に、WebAPIメソッドを呼び出してPDFを読み込もうとしています。ここでWebAPIからpdfを渡し、pdfをMVCコントローラから読み取るには?

は私のAPIの方法である:

[HttpPost] 
    [Route("GetTestPDF")] 
    public HttpResponseMessage TestPDF() 
    { 
     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
     response.Content = new StreamContent(new FileStream(@"C:\MyPath\MyFile.pdf", FileMode.Open, FileAccess.Read)); 
     response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); 
     response.Content.Headers.ContentDisposition.FileName = "MyFile.pdf"; 
     response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf"); 

     return Request.CreateResponse(HttpStatusCode.OK, response); 
    } 

しかし私は、PDFの内容が表示されていない応答を読み取るために行くとき。私はこれでどこが間違っているのか分かりません。

コントローラ方法:

public ActionResult GetPDF() 
     { 
      var response = new HttpResponseMessage(); 

      using (HttpClient httpClient = new HttpClient()) 
      { 
       httpClient.BaseAddress = new Uri(@"my local host");        
       response = httpClient.PostAsync(@"api/job/GetTestPDF", new StringContent(string.Empty)).Result; 
      } 

      var whatisThis = response.Content.ReadAsStringAsync().Result; 
      return new FileContentResult(Convert.FromBase64String(response.Content.ReadAsStringAsync().Result), "application/pdf"); 
     } 

私はwhatisThis変数を調べると、私はコンテンツタイプと、正しく私のAPIから設定されているコンテンツdispostionを参照してください。しかし、PDFの内容は表示されません。

どのようにしてPDFコンテンツを読むことができますか?

編集:私は私が見る私のMVCのサイトで文字列としてコンテンツを読めば

。私はWebAPIのを通じて段階と、それが正常に読み込み、ファイルの内容とresponse.Contentを設定している

{"Version":{"_Major":1,"_Minor":1,"_Build":-1,"_Revision":-1},"Content":{"Headers":[{"Key":"Content-Disposition","Value":["attachment; filename=MyFile.pdf"]},{"Key":"Content-Type","Value":["application/pdf"]}]},"StatusCode":200,"ReasonPhrase":"OK","Headers":[],"RequestMessage":null,"IsSuccessStatusCode":true} 

(私は、ファイルの実際の内容は表示されません)。それでも

これはWebAPIの側またはMVC側の問題であるかどうかわかりません。

+0

:ここ

は、それはあなたに非常に似ていますが、ContentDispositionのものが欠落し、エンドポイント・コードであります、そしてpdfとして働いていますか? –

+0

FileContentResultのコンストラクタはバイト配列をとっているようですので、レスポンスの内容をそのまま読み込むことができます。そうすれば、文字列として読み込む代わりに、 'return new FileContentResult(response.Content.ReadAsByteArrayAsync()。Result"アプリケーション/ pdf "); ' –

+0

Hmm。私は文書の実際の内容以外は全てを見ます。私は提案を変更し、エラー文書を%pdfで始まらないようにしました – PrivateJoker

答えて

2

それはフォーマットコードに簡単ですので、私は答えとして、最初にこれを投稿します!
APIエンドポイントを作成してPDFファイルを返しました。ブラウザから呼び出すと、ファイルが期待通りに開きます。
あなたのAPIはこれを行うようには見えないので、そこに問題があると仮定しましょう。予想通り、あなたのAPIメソッドHTTPGETを作成し、ブラウザからそれを呼び出すオープンPDFファイルを実行したりダウンロードした場合

public HttpResponseMessage Get() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
    FileStream fileStream = File.OpenRead("FileName.pdf"); 
    response.Content = new StreamContent(fileStream); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 

    return response; 
} 
+0

ありがとうございました。私はさらに検査しなければならない。私はそのままテストして実行します。私はContentDispositionを追加して再テストし、それがうまくいった。 – PrivateJoker

+0

ハァッ、奇妙ですが、うれしいです! –

関連する問題