2017-02-02 4 views
0

HttpResponseMessageでラップされたファイルで応答するwebapiコントローラに対して角度がgetの要求を開始すると、ブラウザはファイルのダウンロードであり、データが失われていると認識しません。角度がファイルのブロックをブロックしています

私はフィドラーをチェックして、バイナリデータがレスポンスに含まれていることがわかりました。

私はこれでGETリクエストを開始しています:

 return $http.get(serviceURLRoot + 'api/myreport/' + dateParams.StartDate + '/' + dateParams.EndDate, { withCredentials: true }).success(function (data) { 
     }); 

私は直接アドレスバーに要求を入力した場合、私はバックだけで罰金ファイルを取得します。 window.openを使用することでも動作します:

window.open(serviceURLRoot + 'api/rawdatareport/' + dateParams.StartDate + '/' + dateParams.EndDate); 

なぜ$http.getの仕事をしないのですか?

EDIT -----

はここで、サーバー上に構築されたとしてHttpResponseMessageです:

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
result.Content = new ByteArrayContent(pck.GetAsByteArray()); 
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { 
    FileName = "myReport.xlsx" 
}; 

return result; 
+0

あなたは何をレスポンスしていますか? Ajax自体はファイル保存ダイアログを初期化しません。 – charlietfl

+0

@charlietflサーバまたはクライアントを意味するかどうかわかりません。私は、サーバー上でどのようにレスポンスが構築されているかを示すために質問を更新しました。クライアント側では、 'return $ http.get'文が表示されているだけで、何も削除されていません。 – Legion

答えて

0

あなたは$ httpでAJAXリクエストを行っているので。ブラウザがファイルを実現する唯一の方法は、ブラウザをそこに置くことです。 HTMLではなくファイルが到来していることを認識すると、ダウンロードがポップアップします。だから、実際にそのURLに場所を変更するか、そのURLで新しいウィンドウを開く必要があります。

+0

ajaxでダウンロードを行う方法がありますが、答えは少し不正確で不完全です – charlietfl

+0

だから 'window.open'は正しい方法ですか? – Legion

+0

または 'window.location'、yesです。関連する回答はこちら(http://stackoverflow.com/q/20830309/1658906)およびhttp://stackoverflow.com/q/4545311/1658906をご覧ください。 – juunas

関連する問題