2017-04-17 5 views
0

MVCコントローラメソッドを指定すると、PDFが構築され、返されます。webapi2サービスから通常のMVCコントローラメソッドを呼び出す

[HttpGet] 
    [Route("pdf/{acc}/{sign}")] 
    public async Task<ActionResult> Download(string acc, string sign) 
    { 
     ... // omitted some irrelevant detail. 
     var html = this.View("Letter", model).Capture(this.ControllerContext); 
     byte[] pdf = this.CreatePdfFromHtml(html); 
     return this.File(binary, "application/pdf", file); 
    } 

Capture拡張メソッドは、ファイルとして返されるhtml出力を取り込みます。

以下のwebapi2の方法では、上記の方法(または近いもの)を実行する必要があります。 資格情報とその他のログイン状態が必要です。 WebAPIリクエストとMVCリクエストは、セキュリティのためにCookieを使用する同じアプリケーション内にあります。

[HttpPost] 
    [Route("generate")] 
    public int Generate(MyRequestModel request) 
    { 
     byte[] pdf = ... // how do i get the file above?? 
    } 

答えて

2

あなたは要求いずれかHttpClientまたは単に経由MVCのアクションは、あなたのMVCとWeb APIのアクションの両方が参照できるヘルパークラスへのPDFの作成を考慮する必要があります。

最初の方法では、リクエストをどのように認証する必要がありますか。MVCアクションではやや難しいでしょう。 MVCは、サインイン、確認、クッキーの設定、リダイレクトといった複数のステップの承認を使用します。 HttpClientでクッキーセットを取得するには、同じ手順に従わなければなりません。それをちょっとしたミニブラウザと考えてください。一方、APIリクエストは冪等であるため、Web ApiはAuthorizationヘッダーを受け入れます。

特に、MVCとWeb Apiの両方が同じアプリケーションに存在するため、最も簡単で簡単な方法は、PDF作成コードを単純にヘルパークラスに分解することです。 MVCとWeb APIのアクションは、単にそのクラスのメソッドを呼び出してPDFを取得し、コードの重複を減らすことができます。

+0

おかげさまでクリス - 問題は、PDFはmvcビューからHTMLをキャプチャして生成されるため、PDF生成コードを抽出することがまさに問題です。私はクライアントを作成する必要があるかもしれません - 多くのフープのように見えます.... – Jim

+0

私は角度から通常のMVCメソッドを呼び出すと思う、それは本当に私はwebapiを使用したい一貫性のためです。 – Jim

関連する問題